<img src="img/character/julia/julia1.jpg" width=70% style="display: block; margin: 0 auto;">
<<dialogue "img/character/julia/juliaavatar.jpg" "Bartender" "Hi handsome, what can I do for you?">>
The bartender greet you with a smile.
<<dialogue $playerAvatar "You" "Whiskey">>
@@.option-button;[[Flirt with her|Prologue2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuebar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You follow her without a word, slipping through the narrow doorway and into the quiet of the storage room. The room smells faintly of aged liquor and wood, which somehow makes you even hornier.
<<dialogue "img/character/julia/juliasexavatar1.png" "Julia" "Call me Julia">>
Her body is filled with a mix of pleasure and shock as you give her a passionate kiss. You pull your cock out and tease her a little bit.
<<dialogue "img/character/julia/juliasexavatar3.webp" "Julia" "Oh god~ just give it to me~">>
<img src="img/character/julia/juliasex.webp" width=100%>
<<dialogue "img/character/julia/juliasexavatar2.webp" "Julia" "Cumming~ yes~">>
Julia can feel your cock thrusting into her pussy, hitting all the right spots, making her cum again and again. She moans loudly, feeling herself getting closer and closer to orgasm. Julia's eyes widen in pleasure as she realizes that you're about to cum. She can feel the intensity of your thrusts, and she knows that this is what she wants.
<<dialogue "img/character/julia/juliasexavatar1.png" "Julia" "I'm ready~ fill me up">>
@@.option-button;[[Cum inside her|Prologue4]]@@
@@.option-button;[[Cum on her face|Prologue5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuebar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Julia's body is filled with a mix of pleasure and shock as you fill her with your cum. She can feel the warmth and stickiness of it inside her.
<img src="img/character/julia/juliacuminside.webp" width=100%>
<<dialogue "img/character/julia/juliasexavatar1.png" "Julia" "Fuckkkk~">>
@@.option-button;[[Get up|Prologue6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuebar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Your cum covers Julia's body, leaving her skin sticky and warm from the sensation. She can feel the intensity of your orgasm, and she licks the cum on her tits.
<img src="img/character/julia/juliafacial.webp" width=100%>
<<dialogue "img/character/julia/juliasexavatar1.png" "Julia" "Delicious~">>
@@.option-button;[[Get up|Prologue6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuebar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue "img/character/julia/juliaavatar.jpg" "Julia" "Am I ever going to see you again?">>
<<dialogue $playerAvatar "You" "Depends where I end up">>
<<dialogue "img/character/julia/juliaavatar.jpg" "Julia" "Anything I can do for you? Or… anything you need?">>
You reach into your pocket, pulling out the phone number note.
<<dialogue $playerAvatar "You" "I could use a phone call">>
The phone rings once, twice, each second stretching out. Finally, there’s a click, but there is no answer. For a moment, you’re silent, gathering your thoughts.
<<dialogue $playerAvatar "You" "Joe?">>
<<dialogue "img/various/unknown.png" "Joe" "You're out?">>
<<dialogue $playerAvatar "You" "Yeah, I'm out">>
<<dialogue "img/various/unknown.png" "Joe" "The Boss… he hasn’t let it go. Still pissed. He’s got people out there, and they’ll find you if you stay. You do know that, right? What is your plan?">>
<<dialogue $playerAvatar "You" "Still working that out">>
You knew Joe’s always had your back. And he doesn’t disappoint. His voice softens just a little as he continues.
<<dialogue "img/various/unknown.png" "Joe" "Listen. I’ve got a new identity ready for you; I even stashed fifty grand to get you set up. There’s a flight ticket, too—one-way, out of the country. You take it, and you’ll be a ghost. The Boss won’t find you">>
<<dialogue $playerAvatar "You" "I appreciate it, Joe. I really do">>
@@.option-button;[[Refuse Joe's offer|Prologue9]]@@
@@.option-button;[[Accept Joe's offer(Ending)|Prologue7]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuebar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/various/wedding1.png" width=100%>
Two years later, on a cool autumn night beneath the full moon, you slip a ring onto Julia's finger, sealing a promise that feels as solid as the earth beneath your feet. She agreed almost immediately.
<<dialogue "img/character/julia/juliaavatar.jpg" "Julia" "Yes, yes, I will marry you">>
Life with Julia can't be any happier....
@@.option-button;[[Continue|BADEnding1Bundle2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/wedding1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue $playerAvatar "You" "It’s a kind offer, but I’ve got places I need to be">>
<<dialogue "img/character/julia/juliaavatar.jpg" "Julia" "Farewell then">>
You give her a final nod and leave the bar.
@@.option-button;[[Leave the bar|Prologue11]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuebar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/various/directionpath.jpg" width=50% style="display: block; margin: 0 auto;">
<<if $JoeOffer is 0>>@@.option-button;[[Go to your Girlfriend|Prologue12]]@@<</if>>
<<if $JoeOffer is 1>>@@.option-button;[[Get out of the country|GOODEnding1Bundle1]]@@<</if>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/directionpath.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue $playerAvatar "You" "Been a while since I had a decent drink. And decent company">>
<<dialogue "img/character/julia/juliaavatar.jpg" "Bartender" "You don’t seem like you're from around here">>
<<dialogue $playerAvatar "You" "You often remember the faces of every broken souls coming here for solace?">>
<<dialogue "img/character/julia/juliaavatar.jpg" "Bartender" ". . .">>
<<dialogue $playerAvatar "You" "And you? Been holding down this place for a while?">>
<<dialogue "img/character/julia/juliaavatar.jpg" "Bartender" "Long enough to know which guys are worth talking to">>
<<dialogue $playerAvatar "You" "God knows I might be one of them">>
<<dialogue "img/character/julia/juliaavatar.jpg" "Bartender" "It's still early for open; maybe you should join me in the back,">>
The bartender bites her lip, then she glances over her shoulder, a mischievous glint in her eyes as she nods toward the back of the bar.
<img src="img/character/julia/juliaflash.webp" width=100%>
@@.option-button;[[Go with her|Prologue3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuebar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue $playerAvatar "You" "But that's not what I want, Joe; I want her...">>
<<dialogue "img/various/unknown.png" "Joe" "What are you talking about? You need to take this seriously; forget about Carrie. The boss isn’t just going to let it go. Plus, why do you even assume I know where she is?">>
<<dialogue $playerAvatar "You" "You are a hacker; of course you know, just give it to me, Joe">>
<<dialogue "img/various/unknown.png" "Joe" "Okay, okay, fuck. You got a whole world in front of you, and you go right back into the place you should not go">>
@@.option-button;[[Hang up|Prologue8]]@@
<<set $JoeOffer to 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuebar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue "img/various/unknown.png" "Joe" "Good, good, you will be out of here by next week.">>
<<dialogue $playerAvatar "You" "Thank you. Joe">>
@@.option-button;[[Hang up|Prologue8]]@@
<<set $JoeOffer to 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuebar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
With a final nod to Julia, you turn, stepping back to the door. Just as your hand reaches for the handle, her voice cuts through the quiet.
<<dialogue "img/character/julia/juliaavatar.jpg" "Julia" "Wait!">>
You turn, meeting her gaze. She steps closer, her expression softened by something a little more than just curiosity.
<<dialogue "img/character/julia/juliaavatar.jpg" "Julia" "I could use someone like you here, could be a good way to stick around… see what this place’s really about">>
@@.option-button;[[Stay(Ending)|BADEnding1Bundle1]]@@
@@.option-button;[[Leave|Prologue10]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuebar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/various/fijifishing.jpg" width=100%>
Good Ending 1: Safe landing
<<button "Restart Game">>
<<run UI.restart()>>
<</button>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/fijifishing.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<nobr>><div class="menu-container">
<h1 class="menu-title">BASON</h1>
<p class="menu-tagline">Toto, I've a feeling we're not in Kansas anymore</p>
<div class="menu-buttons">
<<link "<span class='menu-btn primary'>New Game</span>" "NEW GAME">><</link>>
<<link "<span class='menu-btn'>Load Game</span>">>
<<run UI.saves()>>
<</link>>
<div class="menu-divider"></div>
<<link "<span class='menu-btn secondary'>Change Logs</span>">>
<<showPopup "ChangeLogPopup">>
<</link>>
<<link "<span class='menu-btn secondary'>More Infos</span>">>
<<showPopup "Disclaimers">>
<</link>>
<<link "<span class='menu-btn secondary'>Support</span>">>
<<showPopup "SupportPopup">>
<</link>>
</div>
</div><</nobr>>
<<showPopup "Disclaimers">>
<<run hideSidebar()>>
<style>
/* Full-screen background that extends behind sidebars */
body.menu-active {
background: #0a0a0a;
background-image: url('img/banner2.png');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
background-attachment: fixed;
overflow: hidden;
height: 100vh;
}
/* Static film grain texture */
body.menu-active::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='2.5' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.15'/%3E%3C/svg%3E");
opacity: 0.3;
pointer-events: none;
z-index: 0;
}
/* Vignette effect */
body.menu-active::after {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-shadow: inset 0 0 200px rgba(0, 0, 0, 0.8);
pointer-events: none;
z-index: 0;
}
/* Menu container */
.menu-container {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
max-width: 700px;
text-align: center;
z-index: 1;
width: 90%;
}
/* Game title */
.menu-title {
font-family: 'Montserrat', 'Impact', sans-serif;
font-size: clamp(2.5rem, 8vw, 5rem);
font-weight: 900;
color: #c9a961;
text-transform: uppercase;
letter-spacing: 0.15em;
line-height: 1.1;
margin-bottom: 20px;
text-shadow:
0 0 20px rgba(201, 169, 97, 0.6),
0 0 40px rgba(201, 169, 97, 0.3),
3px 3px 8px rgba(0, 0, 0, 0.9);
}
/* Tagline */
.menu-tagline {
font-family: 'Montserrat', serif;
font-size: clamp(0.9rem, 2.5vw, 1.3rem);
color: #888;
letter-spacing: 0.25em;
font-style: italic;
text-transform: lowercase;
margin-bottom: 80px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.9);
}
/* Button container */
.menu-buttons {
display: flex;
flex-direction: column;
gap: 20px;
max-width: 500px;
margin: 0 auto;
}
/* Menu buttons */
.menu-btn {
position: relative;
display: block;
padding: 20px 50px;
background: rgba(15, 15, 15, 0.8);
border: 2px solid rgba(201, 169, 97, 0.4);
color: #c9a961;
text-decoration: none;
font-family: 'Montserrat', sans-serif;
font-size: 1.3rem;
font-weight: 700;
letter-spacing: 0.2em;
text-transform: uppercase;
cursor: pointer;
clip-path: polygon(10px 0, 100% 0, calc(100% - 10px) 100%, 0 100%);
transition: all 0.3s ease;
box-shadow:
0 4px 15px rgba(0, 0, 0, 0.5),
inset 0 1px 0 rgba(201, 169, 97, 0.1);
}
.menu-btn:hover {
background: rgba(25, 25, 25, 0.9);
border-color: #c9a961;
color: #ffffff;
transform: translateX(10px);
text-shadow: 0 0 10px rgba(201, 169, 97, 0.8);
box-shadow:
0 6px 20px rgba(201, 169, 97, 0.3),
inset 0 1px 0 rgba(201, 169, 97, 0.2);
}
/* Primary button (New Game) */
.menu-btn.primary {
font-size: 1.6rem;
padding: 24px 60px;
border: 3px solid rgba(201, 169, 97, 0.6);
background: rgba(20, 20, 20, 0.9);
box-shadow:
0 4px 15px rgba(0, 0, 0, 0.5),
0 0 30px rgba(201, 169, 97, 0.3),
inset 0 1px 0 rgba(201, 169, 97, 0.1);
}
.menu-btn.primary:hover {
box-shadow:
0 6px 25px rgba(201, 169, 97, 0.4),
0 0 40px rgba(201, 169, 97, 0.5),
inset 0 1px 0 rgba(201, 169, 97, 0.2);
}
/* Secondary buttons */
.menu-btn.secondary {
font-size: 1.1rem;
padding: 16px 40px;
letter-spacing: 0.15em;
background: rgba(10, 10, 10, 0.6);
border-width: 1.5px;
}
/* Divider */
.menu-divider {
height: 2px;
background: linear-gradient(90deg,
transparent,
rgba(201, 169, 97, 0.5),
transparent
);
margin: 25px 0;
position: relative;
}
.menu-divider::before,
.menu-divider::after {
content: '';
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 8px;
height: 8px;
background: #c9a961;
box-shadow: 0 0 10px rgba(201, 169, 97, 0.8);
}
.menu-divider::before { left: 20%; }
.menu-divider::after { right: 20%; }
/* Responsive adjustments */
@media (max-width: 768px) {
.menu-container {
padding: 60px 10px;
}
.menu-title {
font-size: 2.5rem;
letter-spacing: 0.1em;
}
.menu-tagline {
font-size: 0.9rem;
margin-bottom: 50px;
}
.menu-btn {
padding: 16px 30px;
font-size: 1.1rem;
}
.menu-btn.primary {
padding: 20px 40px;
font-size: 1.3rem;
}
.menu-btn.secondary {
padding: 14px 25px;
font-size: 1rem;
}
}
</style>
<<script>>
// Add class to body when entering this passage
$('body').addClass('menu-active');
<</script>>
<<done>>
// Remove class when leaving this passage
$('body').removeClass('menu-active');
<</done>>The steel gate clanged open, and the buzz of the prison alarm was replaced by an empty stretch of road that seemed to swallow all sound.
<<dialogue "img/various/prologueprisonguard.png" "Prison guard" "Farewell">>
A guard’s nod, hand you a box, and quickly close the gate. You are now a free man.
You slid your hand into the box, and found a 20-year-old Tic Tac, a keychain, and a worn scrap of paper with a phone number scrawled across it. That was all you had left from before.
<img src="img/various/oldnote.jpg" width=70% style="display: block; margin: 0 auto;"> <<set $Note1 to 1 >>
There was no one waiting for you, no home to go back to. Then you remember your girlfriend Carrie, your only family in the world, who did not even once come visit you in prison.
<<dialogue $playerAvatar "You" "Maybe I should pay her a visit">>
It wasn’t long before you hitched a ride with a trucker. The man dropped you at the nearby town.
By noon, you’d made your way to a bar in the town.
@@.option-button;[[Enter the bar|Prologue1]] @@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prisongate.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Until one day, just like any other day, you come home from work, but this time you notice a figure sitting in your living room talking to your wife, just beyond the reach of the lights. A familiar silhouette—a face you hadn’t seen in years, but one you’d recognize anywhere. The Boss.
<img src="img/character/theboss/theboss1.jpg" width=70% style="display: block; margin: 0 auto;">
<<dialogue "img/character/julia/juliaavatar.jpg" "Julia" "Honey, you didn't tell me about your father">>
As you step into the living room, Julia greets you with a smile.
<<dialogue "img/character/theboss/theboss1avatar.jpg" "The Boss" "It's been a while, my son, thought I’d forget? Excluding me and your sister from your wedding, you break your father's heart, son">>
In that moment, everything slows down. The life you’ve built, the peace you’ve found with Julia—all of it flashes before you as he closes the distance. You realize there’s no running this time, nowhere to hide. You’ll have to face him—and protect the life you’ve fought so hard to build.
<<dialogue $playerAvatar "You" "Can you leave us for a moment, honey">>
<<dialogue "img/character/julia/juliaavatar.jpg" "Julia" "Okay, dinner is going to be done soon; just a quick reminder to you two">>
@@.option-button;[[Confront the Boss|BADEnding1Bundle3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuelivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/theboss/theboss1avatar.jpg" "The Boss" "Nice place you got here, a wife, too, I see. Never pegged you as the domestic type">>
Your fists clench at the mention of Julia. You say nothing, holding his gaze, letting him see you’re not the same person he left behind, yet still someone he should take seriously.
<<dialogue "img/character/theboss/theboss1avatar.jpg" "The Boss" "Thought you could hide out here and start fresh, huh? Walk away from what you owe me? Life doesn’t work that way">>
<<dialogue $playerAvatar "You" "You don’t need to do this, we can settle things here. Just you and me">>
<<dialogue "img/character/theboss/theboss1avatar.jpg" "The Boss" "Oh, it’s going to be settled, alright. But not on your terms. You don’t get to decide anymore. I want my daughter, but you took her away from me, and now you must pay">>
@@.option-button;[[Try lunging at him|BADEnding1Bundle4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuelivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
The Boss snaps his fingers, and his men start coming through the front door and the back door, leaving you no escape. You brace yourself, fists clenched, as the Boss’s men approach. You take a swing, connecting with the first man hard, but the other grabs you from behind, pinning your arms back. You struggle, adrenaline pushing you forward, but it’s no use. The Boss walks up slowly, his eyes filled with a twisted satisfaction.
<<dialogue "img/character/theboss/theboss1avatar.jpg" "The Boss" "You had your shot. Could’ve just stayed gone. Could’ve disappeared">>
He nods to his men, and you feel fists slamming into your ribs, pain exploding with each hit. But you grit your teeth, refusing to give him the satisfaction of seeing you break.
<<dialogue $playerAvatar "You" "You...You">>
They drag you to the kitchen, tie your hands, and shove you to your knees. Blood trickles down your face, vision blurring as the Boss crouches in front of you, his voice calm, almost amused.
<<dialogue "img/character/theboss/theboss1avatar.jpg" "The Boss" "You didn’t think you’d really get away with it, did you? All that time, playing house, pretending you could have a normal life">>
He laughs as his men drag you to the kitchen.
@@.option-button;[[Try to break free|BADEnding1Bundle5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuelivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You hear Julia's voice shaking with rage and fear. They have ripped her clothes off.
<<dialogue "img/character/julia/juliasexavatar1.png" "Julia" "You're going to pay for this. I swear it. You'll rot in prison for what you are doing">>
Julia's eyes are filled with tears as she looks at you, her body exposed and helpless. She tries to cover herself with her tied hands, her voice trembling with fear and shame.
<<dialogue "img/character/julia/juliasexavatar1.png" "Julia" "Please... stop... this is wrong... Help me... honey?">>
<<dialogue $playerAvatar "You" "Julia...">>
<<dialogue "img/character/julia/juliasexavatar1.png" "Julia" "If you let us go now, I won't tell anyone about this. We can forget it ever happe... AHHH...">>
<img src="img/character/julia/juliacuck1.webp" width=100%>
<<dialogue "img/character/theboss/theboss1avatar.jpg" "The Boss" "You’ve got great taste in women, the only thing that ever made your old man proud">>
The boss pulls a surprise penetration on your wife; Julia screams in shock and pain as he suddenly plunges his cock deep inside her.
<<dialogue "img/character/julia/juliasexavatar1.png" "Julia" "AHHH! Oh my god! What are you doing?! Please, please stop! This hurts so much!">>
<<dialogue "img/character/theboss/theboss1avatar.jpg" "The Boss" "Aren't you entertained, son? You asked for this">>
The boss shouts as he turns to you while still fucking Julia.
<<dialogue "img/character/julia/juliasexavatar2.webp" "Julia" "OH GOD, OH GOD, OH GOD! You're going to tear me apart!">>
Julia's large breasts bouncing with each thrust, despite Julia's protests, her pussy's getting wetter and getting wetter.
<<dialogue "img/character/julia/juliasexavatar3.webp" "Julia" "I don't know how much more I can take. Please, please slow down! You're going to...break me!">>
@@.option-button;[[Beg him|BADEnding1Bundle6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuekitchen.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/julia/juliacuck2.webp" width=100%>
<<dialogue $playerAvatar "You" "Please, don't do this">>
The Boss unleashed his loads inside Julia, completely ignoring you. She screams in ecstasy as she feels his hot cum pumping into her pussy.
<<dialogue "img/character/julia/juliasexavatar1.png" "Julia" "OH GOD, OH GOD, OH GOD! THIS IS TOO MUCH! I CAN'T TAKE IT ANYMORE! I'M CUMMINGGG~">>
Her pussy squirts when The Boss's cock is still filling her up. Julia collapses back onto the table, exhausted, still in her orgasm fog. The boss walks toward you.
<<dialogue "img/character/theboss/theboss1avatar.jpg" "The Boss" "This is your life now, son. You took away my daughter; now all you will see for the rest of your life is me fucking your wife">>
The boss returns to Julia; his cock is rock hard again.
<<dialogue "img/character/julia/juliasexavatar2.webp" "Julia" "No! Please, no, you're going to break me">>
AN HOUR LATER.
<img src="img/character/julia/juliabreak.webp" width=100%>
<<dialogue "img/character/julia/juliasexavatar3.webp" "Julia" "FUCK, FUCK, FUCK! I'M COMING! OH GOD, I'M COMING SO HARD!">>
You see Julia riding The Boss, but this time her expression shows neither fear nor disgust. Instead, she starts to beg and plead with him.
<<dialogue "img/character/julia/juliabreak.webp" "Julia" "Please, please, please! Fuck me harder!">>
The defeated look in your eyes said it all. You have given up resisting. With one last look at Julia, you take your own life. Julia's moans faded into a muffled echo.
@@.option-button;[[END|BADEnding1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuekitchen.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/various/dead1.png" width=100%>
Bad Ending 1: You're done with the past, but the past is not done with you.
<<button "Restart Game">>
<<run UI.restart()>>
<</button>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/prologuekitchen.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/various/arrested1.jpg" width=100%>
Neutral Ending 1: Prison Sweet Prison
<<button "Restart Game">>
<<run UI.restart()>>
<</button>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/arrested1.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Two years later, the life you left behind feels like a distant memory, one that barely even stirs as you slip beneath the turquoise waves of Fiji. You’ve made a quiet life here,
You become a scuba diver, catching sea urchins in the morning and selling them to the locals at dawn.
When the day’s done, you sit by the shore, watching the waves roll in. There’s a calm in the routine, the feel of salt and sun, the satisfaction of a life reduced to its essentials. Here, it’s just you and the sea, day after day, nothing more needed.
@@.option-button;[[END|GOODEnding1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/fijifishing.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/grassfield1.png" width=100%>
The drive is long, the road stretching endlessly through fields of tall corn stretching out on either side, swaying gently in the breeze under the dimming sky. The stalks are dense, forming an unbroken sea of green that seems to go on forever, broken only by the occasional scarecrow standing watch.
Up ahead, you catch sight of a few figures working in the fields—farmers in straw hats and suspenders. You slow down, and as you round the final bend, you see a large, old wooden sign that reads, //Welcome to Bason//. The letters are painted in fading red, bordered by flowers planted at its base.
You take a breath, gripping the wheel tighter as you enter the town. A few things catch your eye right away. Towering over the town is a massive factory, the name Malloy Corp gleaming in steel letters across its front.
Not far from the main road, you spot the police station, but it’s not much to look at. The building is small, paint peeling, windows a bit dusty—like an afterthought, giving you the sense that the cops here have little to do.
On the far side of town, there’s a big casino, its neon lights bright even in the daylight. It’s an odd addition to a place like this, but the gleam of it speaks volumes.
@@.option-button;[[Keep driving|Prologue13]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/grassfield1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You eventually pull up a few houses down from Carrie’s address, parking on the quiet street. You sit there, tension mounting as you wait, wondering how to confront her. Until finally, the front door opens. Carrie steps out, looking almost exactly as you remember her, though there’s a new steadiness in her walk, a maturity that suits her. She’s followed by a young woman in her early twenties; she is beautiful. They don’t see you, don’t even glance in your direction as they head down the walkway to the car.
You watch them get in, your heart tightening as they pull out and drive away, leaving you there on the quiet street. Seeing her again stirs up feelings you thought you’d buried. After some time, you made the decision to leave.
You drive aimlessly through Bason, the streets blurring together as your thoughts race. The weight of the past presses on you, but there’s nowhere to put it.
@@.option-button;[[Wandering around|Prologue13.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/eastsideresident/eastsideresident.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
The door creaks as you step into the bar, the quiet enveloping you like a blanket. The place is nearly empty, save for an older man behind the counter. The smell of wood polish and faintly stale beer hangs in the air, mingling with the distant hum of a jukebox playing a tune you don’t recognize.
<img src="img/character/salt/salt.png" width=100%>
<<dialogue "img/character/salt/saltavatar.png" "Oldman" "Howdy, what can I get you?">>
The man behind the counter greets. He’s older, maybe late sixties, with a weathered face and a silver beard trimmed neatly around a wide smile.
<<dialogue $playerAvatar "You" "Whiskey... And one for yourself">>
Salt chuckles as he grabs a glass, pouring amber liquid from a bottle.
<<dialogue "img/character/salt/saltavatar.png" "Oldman" "Are you coming or going?">>
<<dialogue $playerAvatar "You" "Still working that out">>
Salt leans on the counter, crossing his arms, studying you with the kind of look only someone who’s seen a lot of life can pull off. As you sit nursing your whiskey, your eyes wander around the bar. A framed newspaper clipping on the wall catches your attention, a black-and-white photo of a young man in boxing gloves, mid-punch, his expression fierce and determined. The headline is blurred. Salt notices your gaze and chuckles, setting the glass he’s been polishing down.
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Ah, so you spotted my little claim to fame; that's me, Salt Creed">>
<<dialogue $playerAvatar "You" "When you dropped him, fifth?">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Eighth. That was a long time ago. Back when I was young, mean, and had more hair.">>
<<dialogue $playerAvatar "You" "What happened?">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "You see, it was a title fight, I held it for 2 years">>
<<dialogue $playerAvatar "You" "So, where is it?">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Used to hang it right there, by the paper. But I pawned it a while back to cover some medical bills">>
<<dialogue $playerAvatar "You" "It's a shame">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Where are you from?">>
<<dialogue $playerAvatar "You" "Different places">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Where do you sit?">>
<<dialogue $playerAvatar "You" "Roscoe">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "I did 7 years in Allenwood.">>
<<dialogue $playerAvatar "You" "I think we should make a toast, to freedom">>
@@.option-button;[[Empty your glass|Prologue15]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
The sound of boots crossing the floor draws your attention as a tall man with broad shoulders and a sturdy frame returns to the counter. He’s in his late 30s, with neatly combed hair and a clean-shaven face that suggests someone who takes his appearance seriously. He takes the seat a couple of stools down from you, continuing to enjoy his steak.
<<dialogue "img/character/realsheriff/realsheriffavatar.png" "???" "Still quite empty in here, I see... Well, let's stimulate the economy. Next round on me">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Okay, all you tourists buy me drinks today">>
<div class="styled-line"></div>
<<dialogue "img/character/realsheriff/realsheriffavatar.png" "???" "Not a tourist. <<set $PlayerInput to ''>>My name is <<textbox '$PlayerInput' ''>>. The next Monday, I will be sworn in as the new sheriff.">>
<div class="styled-line"></div>
@@.option-button;[[Continue|Prologue15.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/enemy/prologue5thugs.png" width=100%>
The door swung open with a jarring creak, and five men walked in. They didn’t look like the kind to order a drink and relax. One of them, a wiry guy with a shaved head and a scar across his cheek, scanned the room before his eyes locked on Salt.
<<dialogue "img/enemy/prologue5thugs.png" "Thugs" "Salt! You’ve been dodging us too long. You know the drill">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Your boss knows you’re here?">>
<<dialogue "img/enemy/prologue5thugs.png" "Thugs" "Don't worry about him">>
You kept quiet, sipping your whiskey as your eyes flicked to the sheriff. He stood, his face calm but his hand resting near his hip, where his holster sat.
<<dialogue "img/character/realsheriff/realsheriffavatar.png" "$PlayerInput" "Easy now, no one’s doing anything stupid today. Let’s all take a step back and talk this out">>
<<dialogue "img/enemy/prologue5thugs.png" "Thugs" "Who the hell are you, fucker?">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Starting next week, he’ll be your sheriff. There are a few hundred bucks in the counter; take it and leave before you get yourselves into trouble">>
<<dialogue "img/enemy/prologue5thugs.png" "Thugs" "Shut the fuck up, old man">>
The tension in the room skyrocketed as the thug’s hand drifted to the pistol tucked into his waistband.
<<dialogue "img/enemy/prologue5thugs.png" "Thugs" "Sheriff my ass, you don’t know who you’re messing with">>
<<dialogue $playerAvatar "You" "Let’s all take a breath...No one wants this to go sideways for what? 200 bucks, come on">>
<<dialogue "img/enemy/prologue5thugs.png" "Thugs" "Stay out of it, pal. This isn’t your business">>
<<dialogue $playerAvatar "You" "Maybe not. But I’ve seen how these things end. Nobody walks away happy. So how about we sit down, talk it out, and figure something better than a pile of bodies on the floor?">>
For a moment, it seemed like your words might land. The thugs hesitated. But then one of them, jittery and trigger-happy, drew his weapon.
The sheriff moved fast—too fast for anyone to stop him. His gun roared, the first shot hitting one of them square in the chest. Chaos erupted as the thugs drew their weapons.
The sheriff was a good shot. His bullets found their marks, dropping four of the five thugs in quick succession. But the fifth got him, a desperate shot catching the sheriff in the side. He staggered, collapsing against a table as his gun clattered to the floor.
Adrenaline surged through you. Without thinking, you dove for the sheriff’s gun, sliding it into your hand as the last thug aimed for you. You came up in a crouch, the weight of the weapon steady in your grasp.
@@.option-button;[[Gun Fight Tutorial]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/various/gunfighttutorial.webp" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/avatar/dev_avatar.png" "Dev" "This is the gun battle tutorial. Your goal is to take down all enemies before the timer ends. But why is there an accuracy bar? Even if you click directly on an enemy, there is still a chance to miss. Accuracy is a hidden stat that can be improved through practice (yes, 40 hours a day), and it is also slightly affected by your Endurance and Intelligence.">>
<<nobr>>@@.option-button;[[Play|PlayGunFight]]@@
@@.option-button;[[Skip gun fight|DefeatedAThug]]@@<</nobr>>
<<run setup.showNotification("Prologue bonus: Accuracy set to 100%!")>>
<<run hideSidebar()>>
<<set $GunAccuracy to 100>>
<<set $GunEnemyCount to 1>>
<<set $GunTimeLimit to 5>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<!--
=================================================================
GUNFIGHT MINIGAME — Twine SugarCube
=================================================================
HOW TO USE IN YOUR PASSAGE:
1. Set your variables before entering this passage:
<<set $GunAccuracy to 60>> (0–100, hit chance %)
<<set $GunEnemyCount to 3>> (how many enemies)
<<set $GunTimeLimit to 15>> (seconds to kill them all)
2. Paste this entire file's content into a Twine passage.
3. On WIN → goes to passage: DefeatedThug
On LOSE → goes to passage: BADEnding2Bundle1
That's it. You can reuse this passage any time by just
setting the three variables differently each time.
=================================================================
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gunfight</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Rye&family=Special+Elite&display=swap');
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--gold: #d4a017;
--gold-dim: #8b6914;
--blood: #c8360c;
--dark: #0d0a07;
--panel: #1a1208;
}
html, body {
width: 100%; height: 100%;
background: var(--dark);
font-family: 'Special Elite', serif;
overflow: hidden;
cursor: none;
}
/* Scanlines */
body::after {
content: '';
position: fixed; inset: 0;
background: repeating-linear-gradient(
0deg, transparent, transparent 2px,
rgba(0,0,0,0.12) 2px, rgba(0,0,0,0.12) 4px
);
pointer-events: none; z-index: 9998;
}
/* ── Cursor ── */
#cursor {
position: fixed; width: 48px; height: 48px;
pointer-events: none;
transform: translate(-50%, -50%);
z-index: 9999; transition: transform 0.05s;
}
#cursor.firing { transform: translate(-50%, -50%) scale(0.7); }
#cursor.on-enemy .cur-ring { stroke: #ff4422 !important; }
#cursor.on-enemy .cur-lines { stroke: #ff4422 !important; }
/* ── Arena ── */
#arena {
position: fixed; inset: 0;
background-image: url('img/location/bar/barinside.jpg');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
overflow: hidden;
}
#arena::after {
content: '';
position: absolute; bottom: 120px; left: 0; right: 0; height: 2px;
background: linear-gradient(90deg, transparent, #3d2d0a 20%, #5a3d10 50%, #3d2d0a 80%, transparent);
}
.vignette {
position: absolute; inset: 0;
background: radial-gradient(ellipse at center, transparent 40%, rgba(0,0,0,0.75) 100%);
pointer-events: none; z-index: 1;
}
/* ── Dust ── */
.dust {
position: absolute; border-radius: 50%;
background: rgba(180,130,50,0.15);
pointer-events: none;
animation: dustfloat linear infinite;
}
@keyframes dustfloat {
0% { transform: translateY(0) translateX(0); opacity: 0; }
10% { opacity: 1; }
90% { opacity: 0.4; }
100% { transform: translateY(-80px) translateX(20px); opacity: 0; }
}
/* ── HUD top bar ── */
#hud {
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
padding: 10px 24px 8px;
background: linear-gradient(180deg, rgba(13,10,7,0.97) 0%, transparent 100%);
border-bottom: 1px solid rgba(61,45,10,0.5);
display: flex; align-items: center; justify-content: space-between; gap: 16px;
}
.hud-title {
font-family: 'Rye', serif; color: var(--gold);
font-size: 20px; letter-spacing: 4px;
text-shadow: 0 0 20px rgba(212,160,23,0.5);
flex-shrink: 0;
}
.hud-right { display: flex; align-items: center; gap: 24px; }
.hud-stat { text-align: center; }
.hud-stat-label {
color: var(--gold-dim); font-size: 11px;
letter-spacing: 3px; text-transform: uppercase;
display: block; margin-bottom: 3px;
}
.hud-stat-val { color: var(--gold); font-size: 24px; line-height: 1; }
/* Enemy pips */
#enemy-pips { display: flex; gap: 6px; align-items: center; }
.pip {
width: 10px; height: 10px; border-radius: 50%;
background: #ff4422; box-shadow: 0 0 6px #ff2200; transition: all 0.3s;
}
.pip.dead { background: #3d2d0a; box-shadow: none; }
/* ── Timer widget (bottom right) ── */
#timer-wrap {
position: fixed; bottom: 48px; right: 24px; z-index: 101;
width: 180px;
background: rgba(13,10,7,0.85);
border: 1px solid rgba(139,105,20,0.6);
padding: 7px 12px 8px;
backdrop-filter: blur(4px);
}
#timer-wrap-label {
color: var(--gold-dim); font-size: 9px; letter-spacing: 3px;
text-transform: uppercase; display: flex; justify-content: space-between;
margin-bottom: 5px;
}
#timer-wrap-label #time-val-outer { color: var(--gold); font-size: 13px; font-family: 'Special Elite', serif; }
#timer-bar-bg {
height: 6px; background: #1a1208; border-radius: 2px; overflow: hidden;
}
#timer-bar {
height: 100%; width: 100%; border-radius: 2px;
background: linear-gradient(90deg, var(--blood), #f5a623, #f5c842);
transform-origin: left;
transition: width 0.25s linear;
}
#timer-bar.urgent { background: linear-gradient(90deg, #5a0000, var(--blood)); }
/* ── Countdown number (big center flash) ── */
#countdown-flash {
position: fixed; inset: 0; z-index: 600;
display: flex; align-items: center; justify-content: center;
pointer-events: none; opacity: 0;
}
#countdown-flash span {
font-family: 'Rye', serif; font-size: 160px;
color: var(--gold); text-shadow: 0 0 60px rgba(212,160,23,0.7);
line-height: 1;
}
#countdown-flash.show { animation: cflash 0.6s ease-out forwards; }
@keyframes cflash {
0% { opacity: 1; transform: scale(1.4); }
60% { opacity: 0.7; transform: scale(1); }
100% { opacity: 0; transform: scale(0.9); }
}
/* ── Enemy ── */
.enemy {
position: absolute;
transform: translate(-50%, -100%);
cursor: none; z-index: 10;
animation: enemyAppear 0.3s ease-out both;
user-select: none;
}
@keyframes enemyAppear {
from { transform: translate(-50%, -70%); opacity: 0; }
to { transform: translate(-50%, -100%); opacity: 1; }
}
.enemy:hover .enemy-svg { filter: drop-shadow(0 0 10px rgba(255,68,34,0.9)); }
.enemy-svg {
display: block;
filter: drop-shadow(0 0 4px rgba(200,100,50,0.2));
}
.eye { animation: eyepulse 1.4s ease-in-out infinite alternate; }
@keyframes eyepulse {
from { opacity: 0.5; }
to { opacity: 1; filter: drop-shadow(0 0 3px #ff2200); }
}
.enemy.dying {
animation: enemyDie 0.5s ease-out forwards;
pointer-events: none;
}
@keyframes enemyDie {
0% { transform: translate(-50%, -100%) rotate(0deg); opacity: 1; }
40% { transform: translate(-50%, -90%) rotate(-15deg); opacity: 0.8; }
100% { transform: translate(-50%, -60%) rotate(-40deg); opacity: 0; }
}
.enemy.scared { animation: enemyScared 0.3s ease both; }
@keyframes enemyScared {
0%,100% { transform: translate(-50%, -100%); }
33% { transform: translate(calc(-50% - 5px), -100%) rotate(-4deg); }
66% { transform: translate(calc(-50% + 5px), -100%) rotate(4deg); }
}
/* ── Muzzle flash ── */
#muzzle-flash {
position: fixed; inset: 0;
pointer-events: none; z-index: 500; opacity: 0;
}
#muzzle-flash.flash { animation: mflash 0.12s ease-out forwards; }
@keyframes mflash {
0% { opacity: 1; background: radial-gradient(circle at var(--fx,50%) var(--fy,50%), rgba(255,220,100,0.45) 0%, transparent 40%); }
100% { opacity: 0; }
}
/* ── Impact text ── */
.impact {
position: fixed; pointer-events: none; z-index: 200;
transform: translate(-50%, -50%);
animation: impactanim 0.55s ease-out forwards;
}
@keyframes impactanim {
0% { opacity: 1; transform: translate(-50%,-50%) scale(0.5); }
50% { opacity: 1; transform: translate(-50%,-50%) scale(1.2); }
100% { opacity: 0; transform: translate(-50%,-70%) scale(1.4); }
}
.impact-hit { color: #f5c842; font-size: 22px; font-family: 'Rye', serif; text-shadow: 0 0 10px rgba(245,200,66,0.8); }
.impact-miss { color: #5a3d10; font-size: 15px; font-family: 'Special Elite', serif; letter-spacing: 2px; }
/* ── Bullet holes ── */
.bullet-hole {
position: fixed; width: 10px; height: 10px; border-radius: 50%;
transform: translate(-50%, -50%);
background: radial-gradient(circle, #0d0a07 30%, #2a1208 70%, #3d2d0a 100%);
border: 1px solid #5a3d10;
box-shadow: 0 0 6px rgba(0,0,0,0.8), inset 0 1px 2px rgba(0,0,0,0.9);
pointer-events: none; z-index: 50;
animation: holein 0.15s ease-out both;
}
@keyframes holein {
from { transform: translate(-50%,-50%) scale(0); }
to { transform: translate(-50%,-50%) scale(1); }
}
/* ── Bottom bar ── */
#bottom-bar {
position: fixed; bottom: 0; left: 0; right: 0; z-index: 100;
padding: 10px 24px;
background: linear-gradient(0deg, rgba(13,10,7,0.98) 0%, transparent 100%);
border-top: 1px solid rgba(61,45,10,0.5);
display: flex; align-items: center; justify-content: space-between;
}
.acc-wrap { flex: 1; max-width: 260px; }
.acc-label {
color: var(--gold-dim); font-size: 9px; letter-spacing: 3px;
text-transform: uppercase; margin-bottom: 4px;
display: flex; justify-content: space-between;
}
.acc-label span { color: #7aaa55; }
.acc-bar-bg {
height: 6px; background: #2a1f0d; border: 1px solid #5a3d10; border-radius: 2px; overflow: hidden;
}
#acc-bar-fill {
height: 100%; border-radius: 2px;
background: linear-gradient(90deg, var(--blood), #f5c842, #7aaa55);
}
.instruct { color: #5a4015; font-size: 11px; letter-spacing: 2px; }
/* ── Result overlay ── */
#result-overlay {
position: fixed; inset: 0; z-index: 1000;
display: flex; align-items: center; justify-content: center;
background: rgba(0,0,0,0); opacity: 0; pointer-events: none;
transition: background 0.5s, opacity 0.5s; text-align: center;
}
#result-overlay.visible {
opacity: 1; pointer-events: all; background: rgba(0,0,0,0.9);
}
.result-card {
border: 2px solid var(--gold-dim); background: var(--panel);
padding: 40px 56px; position: relative; max-width: 440px; width: 90%;
transform: translateY(20px); transition: transform 0.4s 0.1s ease;
}
#result-overlay.visible .result-card { transform: translateY(0); }
.result-card::before { content: '✦'; position: absolute; top: 10px; left: 14px; color: var(--gold-dim); font-size: 18px; }
.result-card::after { content: '✦'; position: absolute; bottom: 10px; right: 14px; color: var(--gold-dim); font-size: 18px; }
.result-title { font-family: 'Rye', serif; font-size: 42px; letter-spacing: 3px; margin-bottom: 6px; }
.result-title.win { color: #f5c842; text-shadow: 0 0 30px rgba(245,200,66,0.6); }
.result-title.lose { color: var(--blood); text-shadow: 0 0 30px rgba(200,54,12,0.6); }
.result-divider { width: 80px; height: 2px; background: var(--gold-dim); margin: 14px auto; }
.result-desc { color: #9a8060; font-size: 13px; letter-spacing: 1px; line-height: 1.7; margin-bottom: 14px; }
.result-stats { display: flex; gap: 20px; justify-content: center; margin-bottom: 24px; }
.rstat { text-align: center; }
.rstat-label { color: #5a4015; font-size: 9px; letter-spacing: 2px; text-transform: uppercase; display: block; margin-bottom: 3px; }
.rstat-val { color: var(--gold); font-size: 20px; }
.continue-btn {
padding: 12px 40px; border: 2px solid var(--gold-dim); background: transparent;
color: var(--gold); font-family: 'Special Elite', serif;
font-size: 13px; letter-spacing: 4px; text-transform: uppercase;
cursor: pointer; transition: all 0.15s;
}
.continue-btn:hover { background: var(--gold-dim); color: var(--dark); }
</style>
</head>
<body>
<div id="cursor">
<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
<circle class="cur-ring" cx="24" cy="24" r="18" stroke="#d4a017" stroke-width="1.5" fill="none"/>
<circle class="cur-ring" cx="24" cy="24" r="10" stroke="#d4a017" stroke-width="1" fill="none" stroke-dasharray="3 3" opacity="0.6"/>
<circle cx="24" cy="24" r="2" fill="#d4a017"/>
<line class="cur-lines" x1="24" y1="0" x2="24" y2="10" stroke="#d4a017" stroke-width="1.5"/>
<line class="cur-lines" x1="24" y1="38" x2="24" y2="48" stroke="#d4a017" stroke-width="1.5"/>
<line class="cur-lines" x1="0" y1="24" x2="10" y2="24" stroke="#d4a017" stroke-width="1.5"/>
<line class="cur-lines" x1="38" y1="24" x2="48" y2="24" stroke="#d4a017" stroke-width="1.5"/>
</svg>
</div>
<div id="muzzle-flash"></div>
<div id="arena"><div class="vignette"></div></div>
<div id="hud">
<div class="hud-title">✦ DRAW! ✦</div>
<div class="hud-right">
<div class="hud-stat">
<span class="hud-stat-label">Enemies</span>
<div id="enemy-pips"></div>
</div>
<div class="hud-stat">
<span class="hud-stat-label">Shot Accuracy</span>
<span class="hud-stat-val" id="remaining-val">—</span>
</div>
<div class="hud-stat">
<span class="hud-stat-label">Time</span>
<span class="hud-stat-val" id="time-val">—</span>
</div>
<div class="hud-stat">
<span class="hud-stat-label">Hits</span>
<span class="hud-stat-val" id="hits-val">0</span>
</div>
</div>
</div>
<div id="timer-wrap">
<div id="timer-wrap-label">
<span>⏱ Time</span>
<span id="time-val-outer">—</span>
</div>
<div id="timer-bar-bg"><div id="timer-bar"></div></div>
</div>
<div id="countdown-flash"><span id="countdown-num"></span></div>
<div id="bottom-bar">
<div class="acc-wrap">
<div class="acc-label">Hit chance <span id="acc-pct-label">—</span></div>
<div class="acc-bar-bg"><div id="acc-bar-fill" style="width:0%"></div></div>
</div>
<div class="instruct">CLICK ENEMIES TO SHOOT</div>
</div>
<div id="result-overlay">
<div class="result-card">
<div class="result-title" id="result-title"></div>
<div class="result-divider"></div>
<div class="result-desc" id="result-desc"></div>
<div class="result-stats">
<div class="rstat"><span class="rstat-label">Shots fired</span><span class="rstat-val" id="r-shots">0</span></div>
<div class="rstat"><span class="rstat-label">Accuracy</span> <span class="rstat-val" id="r-hits">0%</span></div>
<div class="rstat"><span class="rstat-label">Time left</span> <span class="rstat-val" id="r-time">0s</span></div>
</div>
<button class="continue-btn" onclick="handleContinue()">Continue →</button>
</div>
</div>
<script>
(function() {
// ═══════════════════════════════════════════════════════════════
// CONFIG — reads from SugarCube story variables.
// Set these before entering the passage:
// <<set $GunAccuracy to 60>> ← hit chance % (0–100)
// <<set $GunEnemyCount to 3>> ← number of enemies
// <<set $GunTimeLimit to 15>> ← seconds on the clock
//
// The fallback values below are used ONLY if the variable
// isn't defined (e.g. while previewing the file standalone).
// ═══════════════════════════════════════════════════════════════
function getSV(name, fallback) {
try {
// SugarCube exposes story variables on State.variables
var v = window.SugarCube
? window.SugarCube.State.variables[name]
: (window.State ? window.State.variables[name] : undefined);
return (v !== undefined && v !== null) ? v : fallback;
} catch(e) {
return fallback;
}
}
const Accuracy = getSV('GunAccuracy', 60); // %
const EnemyCount = getSV('GunEnemyCount', 3); // count
const TimeLimit = getSV('GunTimeLimit', 15); // seconds
// ═══════════════════════════════════════════════════════════════
// CONSTANTS
// ═══════════════════════════════════════════════════════════════
const ENEMY_W = 90;
const REPOSITION_INTERVAL = 3500;
const REPOSITION_VARIANCE = 0.6;
// ═══════════════════════════════════════════════════════════════
// STATE
// ═══════════════════════════════════════════════════════════════
let enemies = [];
let shotsFired = 0;
let hitsLanded = 0;
let gameActive = false;
let gameResult = null; // 'win' | 'lose'
let timeRemaining = TimeLimit;
let timerInterval = null;
const arena = document.getElementById('arena');
const cursor = document.getElementById('cursor');
const flash = document.getElementById('muzzle-flash');
const overlay = document.getElementById('result-overlay');
const timerBar = document.getElementById('timer-bar');
const timeVal = document.getElementById('time-val');
const timeValOuter = document.getElementById('time-val-outer');
// ═══════════════════════════════════════════════════════════════
// CURSOR
// ═══════════════════════════════════════════════════════════════
document.addEventListener('mousemove', e => {
cursor.style.left = e.clientX + 'px';
cursor.style.top = e.clientY + 'px';
});
document.addEventListener('mouseleave', () => cursor.style.opacity = '0');
document.addEventListener('mouseenter', () => cursor.style.opacity = '1');
// ═══════════════════════════════════════════════════════════════
// DUST PARTICLES
// ═══════════════════════════════════════════════════════════════
function spawnDust() {
for (var i = 0; i < 18; i++) {
var d = document.createElement('div');
d.className = 'dust';
var size = 2 + Math.random() * 5;
d.style.cssText =
'width:' + size + 'px;height:' + size + 'px;' +
'left:' + (Math.random()*100) + '%;' +
'bottom:' + (80 + Math.random()*80) + 'px;' +
'animation-duration:' + (5 + Math.random()*8) + 's;' +
'animation-delay:-' + (Math.random()*10) + 's;';
arena.appendChild(d);
}
}
// ═══════════════════════════════════════════════════════════════
// ENEMY SVG
// ═══════════════════════════════════════════════════════════════
function buildEnemySVG(id) {
var hats = ['#1a1208','#2a1208','#1f1a10'];
var coats = ['#1a1208','#12100a','#201810'];
var h = hats[id % 3], c = coats[id % 3];
var H = Math.round(ENEMY_W * 1.45);
return '<svg class="enemy-svg" width="' + ENEMY_W + '" height="' + H + '" viewBox="0 0 90 130" xmlns="http://www.w3.org/2000/svg">' +
'<rect x="23" y="4" width="44" height="9" rx="2" fill="'+h+'" stroke="#8b6914" stroke-width="1"/>' +
'<rect x="29" y="1" width="32" height="8" rx="2" fill="'+h+'" stroke="#8b6914" stroke-width="1"/>' +
'<ellipse cx="45" cy="29" rx="15" ry="17" fill="#3d2b15" stroke="#6b4c20" stroke-width="1.5"/>' +
'<circle class="eye" cx="39" cy="26" r="3.5" fill="#1a1208"/>' +
'<circle class="eye" cx="51" cy="26" r="3.5" fill="#1a1208"/>' +
'<circle cx="40" cy="26" r="1.5" fill="#cc2200" opacity="0.9"/>' +
'<circle cx="52" cy="26" r="1.5" fill="#cc2200" opacity="0.9"/>' +
'<path d="M38 35 Q45 39 52 35" stroke="#5a3d1a" stroke-width="1.5" fill="none"/>' +
'<path d="M22 46 L25 101 L65 101 L68 46 Q55 56 45 53 Q35 56 22 46Z" fill="'+c+'" stroke="#3d2d0a" stroke-width="1"/>' +
'<path d="M32 49 L38 71 L45 66 L52 71 L58 49 Q52 59 45 56 Q38 59 32 49Z" fill="#2a1f0d" stroke="#5a3d10" stroke-width="0.5"/>' +
'<rect x="28" y="83" width="34" height="6" rx="1" fill="#3d2d0a" stroke="#8b6914" stroke-width="1"/>' +
'<rect x="43" y="83" width="6" height="6" fill="#8b6914"/>' +
'<path d="M22 49 L10 76 L18 78 L28 56Z" fill="'+c+'" stroke="#3d2d0a" stroke-width="1"/>' +
'<rect x="1" y="69" width="18" height="5" rx="1" fill="#5a3d10" stroke="#8b6914" stroke-width="0.8"/>' +
'<rect x="12" y="66" width="5" height="8" rx="1" fill="#3d2d0a" stroke="#8b6914" stroke-width="0.8"/>' +
'<path d="M68 49 L80 73 L72 75 L62 56Z" fill="'+c+'" stroke="#3d2d0a" stroke-width="1"/>' +
'<rect x="28" y="99" width="14" height="18" rx="2" fill="#2a1208" stroke="#3d2d0a" stroke-width="1"/>' +
'<rect x="48" y="99" width="14" height="18" rx="2" fill="#2a1208" stroke="#3d2d0a" stroke-width="1"/>' +
'<line x1="28" y1="115" x2="20" y2="117" stroke="#8b6914" stroke-width="1"/>' +
'<line x1="62" y1="115" x2="70" y2="117" stroke="#8b6914" stroke-width="1"/>' +
'</svg>';
}
// ═══════════════════════════════════════════════════════════════
// POSITIONS
// ═══════════════════════════════════════════════════════════════
function randomPos() {
var mx = 80, top = 80, bot = 140;
return {
x: mx + Math.random() * (window.innerWidth - mx * 2),
y: top + Math.random() * (window.innerHeight - top - bot)
};
}
function safePos(existing) {
var MIN = 130;
for (var attempt = 0; attempt < 30; attempt++) {
var p = randomPos(), ok = true;
for (var i = 0; i < existing.length; i++) {
var dx = existing[i].x - p.x, dy = existing[i].y - p.y;
if (Math.sqrt(dx*dx + dy*dy) < MIN) { ok = false; break; }
}
if (ok) return p;
}
return randomPos();
}
// ═══════════════════════════════════════════════════════════════
// SPAWN
// ═══════════════════════════════════════════════════════════════
function spawnEnemies() {
for (var i = 0; i < EnemyCount; i++) {
(function(idx) {
var pos = safePos(enemies);
var el = document.createElement('div');
el.className = 'enemy';
el.innerHTML = buildEnemySVG(idx);
el.style.left = pos.x + 'px';
el.style.top = pos.y + 'px';
el.style.animationDelay = (idx * 0.12) + 's';
var enemy = { id: idx, el: el, x: pos.x, y: pos.y, alive: true };
el.addEventListener('click', function(e) { e.stopPropagation(); onEnemyClick(enemy); });
el.addEventListener('mouseenter', function() { cursor.classList.add('on-enemy'); });
el.addEventListener('mouseleave', function() { cursor.classList.remove('on-enemy'); });
arena.appendChild(el);
enemies.push(enemy);
scheduleReposition(enemy);
})(i);
}
updateHUD();
}
// ═══════════════════════════════════════════════════════════════
// REPOSITION
// ═══════════════════════════════════════════════════════════════
function scheduleReposition(enemy) {
if (!enemy.alive) return;
var delay = REPOSITION_INTERVAL * (0.5 + Math.random() * REPOSITION_VARIANCE);
enemy.repoTimer = setTimeout(function() {
if (!enemy.alive || !gameActive) return;
var pos = safePos(enemies.filter(function(e) { return e !== enemy; }));
enemy.x = pos.x; enemy.y = pos.y;
enemy.el.style.transition = 'left 0.6s ease-in-out, top 0.6s ease-in-out';
enemy.el.style.left = pos.x + 'px';
enemy.el.style.top = pos.y + 'px';
setTimeout(function() { if (enemy.el) enemy.el.style.transition = ''; }, 700);
scheduleReposition(enemy);
}, delay);
}
// ═══════════════════════════════════════════════════════════════
// SHOOT
// ═══════════════════════════════════════════════════════════════
function onEnemyClick(enemy) {
if (!gameActive || !enemy.alive) return;
var roll = Math.floor(Math.random() * 101);
var hit = (Accuracy >= roll);
shotsFired++;
fireFlash();
if (hit) {
hitsLanded++;
enemy.alive = false;
clearTimeout(enemy.repoTimer);
enemy.el.classList.remove('scared');
enemy.el.classList.add('dying');
cursor.classList.remove('on-enemy');
showImpact(enemy.x, enemy.y - 60, true);
spawnBulletHole(enemy.x + (Math.random()-0.5)*20, enemy.y - 60 - Math.random()*30);
setTimeout(function() { if (enemy.el) enemy.el.remove(); checkWin(); }, 500);
} else {
enemy.el.classList.remove('scared');
void enemy.el.offsetWidth;
enemy.el.classList.add('scared');
showImpact(enemy.x + (Math.random()-0.5)*80, enemy.y - 40, false);
spawnBulletHole(enemy.x + (Math.random()-0.5)*60 + 40, enemy.y - Math.random()*80);
}
updateHUD();
}
// Miss on empty arena click
arena.addEventListener('click', function(e) {
if (!gameActive) return;
shotsFired++;
fireFlash();
showImpact(e.clientX, e.clientY, false);
spawnBulletHole(e.clientX, e.clientY);
updateHUD();
});
// ═══════════════════════════════════════════════════════════════
// FX
// ═══════════════════════════════════════════════════════════════
function fireFlash() {
cursor.classList.add('firing');
setTimeout(function() { cursor.classList.remove('firing'); }, 80);
flash.style.setProperty('--fx', (parseInt(cursor.style.left) / window.innerWidth * 100) + '%');
flash.style.setProperty('--fy', (parseInt(cursor.style.top) / window.innerHeight * 100) + '%');
flash.classList.remove('flash');
void flash.offsetWidth;
flash.classList.add('flash');
}
function showImpact(x, y, hit) {
var d = document.createElement('div');
d.className = 'impact ' + (hit ? 'impact-hit' : 'impact-miss');
d.textContent = hit ? '✦ HIT!' : 'miss';
d.style.left = x + 'px';
d.style.top = y + 'px';
document.body.appendChild(d);
setTimeout(function() { d.remove(); }, 600);
}
function spawnBulletHole(x, y) {
var h = document.createElement('div');
h.className = 'bullet-hole';
h.style.left = x + 'px';
h.style.top = y + 'px';
document.body.appendChild(h);
setTimeout(function() { h.style.transition = 'opacity 1s'; h.style.opacity = '0'; }, 4000);
setTimeout(function() { h.remove(); }, 5200);
}
// ═══════════════════════════════════════════════════════════════
// COUNTDOWN TIMER
// ═══════════════════════════════════════════════════════════════
function startTimer() {
timeRemaining = TimeLimit;
updateTimerDisplay();
timerInterval = setInterval(function() {
timeRemaining -= 0.1;
if (timeRemaining <= 0) {
timeRemaining = 0;
updateTimerDisplay();
clearInterval(timerInterval);
if (gameActive) {
gameActive = false;
gameResult = 'lose';
setTimeout(showResult, 300);
}
} else {
updateTimerDisplay();
// Flash countdown number at each whole second
var secs = Math.ceil(timeRemaining);
if (Math.abs(timeRemaining - secs) < 0.15 && secs <= 5 && secs >= 1) {
flashCountdown(secs);
}
}
}, 100);
}
function updateTimerDisplay() {
var s = Math.max(0, timeRemaining);
var pct = (s / TimeLimit) * 100;
timerBar.style.width = pct + '%';
var txt = s.toFixed(1) + 's';
timeVal.textContent = txt;
timeValOuter.textContent = txt;
if (pct < 30) {
timerBar.classList.add('urgent');
timeVal.style.color = '#c8360c';
timeValOuter.style.color = '#c8360c';
} else {
timerBar.classList.remove('urgent');
timeVal.style.color = '';
timeValOuter.style.color = '';
}
}
function flashCountdown(n) {
var el = document.getElementById('countdown-flash');
var num = document.getElementById('countdown-num');
num.textContent = n;
el.classList.remove('show');
void el.offsetWidth;
el.classList.add('show');
}
// ═══════════════════════════════════════════════════════════════
// HUD
// ═══════════════════════════════════════════════════════════════
function initHUD() {
document.getElementById('acc-pct-label').textContent = Accuracy + '%';
document.getElementById('acc-bar-fill').style.width = Accuracy + '%';
document.getElementById('remaining-val').textContent = '0%';
document.getElementById('time-val').textContent = TimeLimit + '.0s';
}
function updateHUD() {
var liveAcc = shotsFired > 0 ? Math.round(hitsLanded / shotsFired * 100) : 0;
document.getElementById('remaining-val').textContent = liveAcc + '%';
document.getElementById('hits-val').textContent = hitsLanded;
var pipsEl = document.getElementById('enemy-pips');
pipsEl.innerHTML = '';
enemies.forEach(function(e) {
var pip = document.createElement('div');
pip.className = 'pip' + (e.alive ? '' : ' dead');
pipsEl.appendChild(pip);
});
}
// ═══════════════════════════════════════════════════════════════
// WIN CHECK
// ═══════════════════════════════════════════════════════════════
function checkWin() {
if (enemies.every(function(e) { return !e.alive; })) {
gameActive = false;
gameResult = 'win';
clearInterval(timerInterval);
setTimeout(showResult, 400);
}
}
// ═══════════════════════════════════════════════════════════════
// RESULT SCREEN
// ═══════════════════════════════════════════════════════════════
function showResult() {
var win = gameResult === 'win';
var acc = shotsFired > 0 ? Math.round(hitsLanded / shotsFired * 100) : 0;
document.getElementById('result-title').textContent = win ? 'VICTORY!' : 'TIME\'S UP.';
document.getElementById('result-title').className = 'result-title ' + (win ? 'win' : 'lose');
document.getElementById('result-desc').textContent = win
? 'All ' + EnemyCount + ' outlaw' + (EnemyCount > 1 ? 's' : '') + ' down. You\'re still standing.'
: 'The clock ran out. They didn\'t.';
document.getElementById('r-shots').textContent = shotsFired;
document.getElementById('r-hits').textContent = acc + '%';
document.getElementById('r-time').textContent = win ? timeRemaining.toFixed(1) + 's' : '0.0s';
overlay.classList.add('visible');
}
// ═══════════════════════════════════════════════════════════════
// CONTINUE → SUGARCUBE NAVIGATION
// Win → $GunMiniGameStatus = 2
// Lose → $GunMiniGameStatus = 1
// Then always goes to passage: AfterMatch
// ═══════════════════════════════════════════════════════════════
function handleContinue() {
var acc = shotsFired > 0 ? Math.round(hitsLanded / shotsFired * 100) : 0;
try {
SugarCube.State.variables.GunMiniGameStatus = (gameResult === 'win') ? 2 : 1;
SugarCube.State.variables.GunMiniGameAccuracy = acc;
SugarCube.Engine.play('AfterMatch');
} catch(e) {
try {
State.variables.GunMiniGameStatus = (gameResult === 'win') ? 2 : 1;
State.variables.GunMiniGameAccuracy = acc;
Engine.play('AfterMatch');
} catch(e2) {
alert('Navigation error: ' + e2.message);
}
}
}
window.handleContinue = handleContinue;
// ═══════════════════════════════════════════════════════════════
// INIT
// ═══════════════════════════════════════════════════════════════
initHUD();
spawnDust();
setTimeout(function() {
gameActive = true;
spawnEnemies();
startTimer();
}, 400);
})();
</script>
</body>
</html><<nobr>><<if $GunMiniGameStatus == 2>>
<img src="img/various/bullseye.webp" width=50% style="display: block; margin: 0 auto;">
Bullseye!
@@.option-button;[[Continue|DefeatedAThug]]@@
<<else>>
<img src="img/various/deathbygun.webp" width=50% style="display: block; margin: 0 auto;">
You missed.
@@.option-button;[[Continue|BADEnding2Bundle1]]@@
<</if>><</nobr>>
<<set $GunAccuracy to 20>>
<<set $GunMiniGameAccuracy = 0>>
<<run setup.showNotification("Your accuracy is " +$GunAccuracy +"%!")>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Pain exploded in your shoulder as the bullet tore through you, spinning you onto your back. The room tilted, the sound of your heartbeat thundering in your ears. Your vision swimming.
Gritting your teeth, you struggle to lift the gun again, but it’s no use. The thug stomps on your hand, sending the weapon skittering far out of your reach. Salt is trying to reason with him, but his words are silenced by a bullet. As darkness closes in, the last thing you see is the thug glaring down at you, cursing, before delivering a final shot to your head.
@@.option-button;[[END|BADEnding2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You fired, hitting the thug square in the chest. He let out a choked gasp, his weapon falling from his hand as he collapsed to the floor. Silence fell, the acrid smell of gunpowder hanging heavy in the air. Your hands trembled as you lowered the gun, your chest heaving with each breath. Salt peeked out from behind the counter, his eyes wide as he surveyed the scene.
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Damn, man">>
Your focus shifting to the sheriff. He was slumped against a table, blood pooling beneath him.
<<dialogue "img/character/realsheriff/realsheriffavatar.png" "$PlayerInput" "Am I dead? This is... my first day in town...">>
<<dialogue $playerAvatar "You" "Sorry">>
<<dialogue "img/character/realsheriff/realsheriffavatar.png" "$PlayerInput" "Hope my mother was right about G...">>
The sheriff's chest rose one last time, then fell. His hand slipped from the wound, and his body went still. You just stood over his body, gun still in hand. Salt had already ducked behind the bar, but now he slowly rose,
<<dialogue "img/character/salt/saltavatar.png" "Salt" "This is what you call in the Bible, a clusterfuck of epic proportions. (Fadda is not going to like this)">>
<<dialogue $playerAvatar "You" "6 corpses, one of them is the new sheriff. God's greatest joke...">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "You need to go. I'll deal with this; that's the least I can do; they would've killed me, same as him">>
<<dialogue $playerAvatar "You" "I appreciated that, Salt">>
You thank Salt, your gaze lingering on the sheriff’s body, still undecided what to do next. But as you stood there, the sharp ring of a phone broke the silence. It was the sheriff's phone. You walked over and picked it up.
<<dialogue $playerAvatar "You" "Hello?">>
<<dialogue "img/various/unknown.png" "???" "Sheriff $PlayerInput, it's Mayor Kevin Kendrick. We need to confirm the schedule for your swearing-in ceremony this week. Am I catching you at a bad time?">>
You froze for a few seconds, and you could see Salt giving you an intense look.
<<dialogue "img/various/unknown.png" "Mayor" "Sheriff? Are you there?">>
<<dialogue $playerAvatar "You" "Yeah, I'm here">>
<<dialogue "img/various/unknown.png" "Mayor" "How's the drive going?">>
<<dialogue $playerAvatar "You" "A lot less to see than you'd think">>
<<dialogue "img/various/unknown.png" "Mayor" "Well, I just want to confirm the schedule; you'd be in town tomorrow, right?">>
<<dialogue $playerAvatar "You" "Yeah, should be">>
<<dialogue "img/various/unknown.png" "Mayor" "Great, so that's 8 AM at Miles Diner. I'm looking forward to meeting you in person">>
<<dialogue $playerAvatar "You" "Great, see you then">>
@@.option-button;[[Hang up the phone|Prologue17]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/various/dead1.png" width=100%>
Bad Ending 2: Lil Bro can't even get through the tutorial.
<<button "Restart Game">>
<<run UI.restart()>>
<</button>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/salt/saltavatar.png" "Salt" "Now tell me what the hell that was">>
<<dialogue $playerAvatar "You" "Your town needs a new sheriff, doesn't it? Hey, we don't have time for this. We need to clean this place">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "You are right. If they found out about this, we are all fucked">>
<b>MIDNIGHT</b>
<img src="img/various/digginggrave.webp" width=70% style="display: block; margin: 0 auto;">
<<dialogue $playerAvatar "You" "That's it; I doubt anyone is going to find them here. Do you want to pray to the ill-fated sheriff?">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Yeah, give me 5 minutes; after that, your story should be one hell of a masterpiece to answer for that phone call">>
@@.option-button;[[Rest|Prologue18]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/thewoods.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "I understand it now, do you have a place to stay yet?">>
<<dialogue $playerAvatar "You" "No">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "This is where I store booze, but in this economy, there's not much to store. I have to import some from the hotel; you can imagine what kind of hotel that is based on its 'employees' down there. Anyway, you can stay here for now">>
Salt led you to an old wooden house right beside the bar.
<<dialogue $playerAvatar "You" "Thank you, Salt">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Okay, good night">>
@@.option-button;[[Lie on the bed|Prologue19]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/saltbar.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.2) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You're lying on the bed, phone in hand, and dialed Joe’s number. The line rang twice before his familiar voice answered.
<<dialogue "img/various/unknown.png" "Joe" "What’s this about?">>
<<dialogue $playerAvatar "You" "I need your help. I need to become someone else. Can you make it happen?">>
<<dialogue "img/various/unknown.png" "Joe" "You always know how to make life complicated, don’t you? Who do you need to be?">>
<<dialogue $playerAvatar "You" "$PlayerInput, Woodland, Pennsylvania">>
<<dialogue "img/various/unknown.png" "Joe" "Should be a piece of cake...Unless he's a fucking cop, are you insane?">>
<<dialogue $playerAvatar "You" "Can you do it? Come on, I'll owe you for this">>
<<dialogue "img/various/unknown.png" "Joe" "Damn right I can. Give me a couple of hours. I’ll set everything up—ID, credentials, the works. You’ll be as real as it gets on paper. But the badge...">>
<<dialogue $playerAvatar "You" "Nah, I got the badge">>
<<dialogue "img/various/unknown.png" "Joe" "I don't even want to know">>
You hang up the phone and call it a night.
@@.option-button;[[Sleep|Prologue20]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.2) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
NEXT MORNING
<img src="img/various/coffeeshop.png" width=70% style="display: block; margin: 0 auto;">
You sit in your car outside the restaurant, tapping the steering wheel nervously. With another deep breath, you step out of the car and head toward the restaurant.
The door jingled softly as you stepped into the restaurant, the smell of freshly brewed coffee and sizzling bacon meeting you instantly. Your boots scuffed against the polished wood floor as you took a slow glance around.
Locals were scattered at the tables, chatting quietly over breakfast. But your attention locked on the man sitting alone in the corner. The tailored suit, neatly combed hair, and air of authority were unmistakable. That had to be the mayor.
<<dialogue $playerAvatar "You" "Excuse me">>
<img src="img/character/kevin/kevin.png" width=70% style="display: block; margin: 0 auto;">
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Sheriff $PlayerInput?">>
<<dialogue $playerAvatar "You" "That's right">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "It's great to meet you; please take a sit">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "I just want to say that I'm glad that you were able to come to this town safe and sound, because your journey ahead is going to be rough. I pissed off some people when I hired you">>
<<dialogue $playerAvatar "You" "Who exactly?">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "The mob, the gang, the brotherhood... You see, all the sheriffs before you, even Morgan, were locals. In the end, they either ended up on someone's payroll or were too concerned for their families to take action. So I needed an outsider">>
<<dialogue $playerAvatar "You" "So you brought me in here to take down these criminals">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "They are not just criminals, sheriff; they are animals">>
<<dialogue $playerAvatar "You" "Okay">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Now, I know you don't work till Monday, but I want to show you the BSD">>
@@.option-button;[[Leave the restaurant|Prologue21]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/coffeeshop.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/location/bsd/bsd.jpg" width=70% style="display: block; margin: 0 auto;">
15 minutes later, we arrive at the Bason Sheriff Department. The building was modest, three stories tall, with faded paint and a cracked sidewalk out front. The sign above the door read Bason Sheriff Department, though the lettering was peeling in places. A squad car sat parked outside, its paint dull, the emblem on the side barely legible.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Here we are">>
The interior was quiet, the air thick with the smell of stale coffee and old paper. A receptionist looked up from her desk, her expression a mix of curiosity and surprise as the mayor walked in with you.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Morning, Donna. Is everyone around?">>
<img src="img/character/donna/donna.jpg" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/character/donna/donnaavatar.jpg" "Donna" "They are all in the back, sir">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "This is $PlayerInput">>
<<dialogue $playerAvatar "You" "Good to meet you, Donna">>
<<dialogue "img/character/donna/donnaavatar.jpg" "Donna" "Sheriff $PlayerInput, Great to meet you">>
@@.option-button;[[Follow the mayor|Prologue21.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsd.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Selena, why don’t you take the sheriff here on a tour of the town?">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "A tour, huh? Do you want souvenirs too?">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "You're the deputy. Besides, it’ll be good for you two to get acquainted">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Fine. So where do you want to go?">>
Selena drives you through the quiet streets of Bason. She doesn’t talk much, her eyes fixed on the road, the glow of sunloght sliding across her face.
@@.option-button;[[Speak up|Prologue23]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsd.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
In game variable
<<set $Chapter1 = 1>>
<<set $Chapter2 = 0>>
Hint Lock
<<set $unlockedCharacters = {
credit: true,
selena: true,
haley: true,
riley: true,
marlene: false,
cory: false,
rissa: true,
maria: true,
vicki: false,
danni: false,
gabbie: true,
evelyn: true,
gwen: false,
cassie: true,
olivia: true,
mary: false,
franny: false,
carrie: true,
jocelyn: false,
tara: false,
marina: false
}>>
Guild Set Up
<<if not $storylineGuides>>
<<set $storylineGuides to {
"Chapter I Guide": "Locked",
"Abigail": "Locked",
"Cassie": "Locked",
"Carrie": "Locked",
"Cory": "Locked",
"Danni": "Locked",
"Evelyn": "Locked",
"Gabbie": "Locked",
"Gwen": "Locked",
"Haley": "Locked",
"Jocelyn": "Locked",
"Maria": "Locked",
"Marlene": "Locked",
"Mary": "Locked",
"Olivia": "Locked",
"Paola": "Locked",
"Riley": "Locked",
"Rissa": "Locked",
"Selena": "Locked",
"Tara": "Locked",
"Vicki": "Locked"
}>>
<<set $currentStoryline to "Chapter I Guide">>
<</if>>
Prologue
<<set $Note1 to 0>>
<<set $ShootStatus to 0>>
<<set $PrologueHotelBossTalk = 1>>
<<set $PrologueArmsDealerTalk = 1>>
<<set $PrologueDrugDealerTalk = 1>>
<<set $PrologueSelenaTalk = 1>>
<<set $PrologueMayorTalk = 2>>
Time
<<set $now to new Date(2026, 0, 5, 8, 0, 0)>>
<<set $FirstGameTime to new Date(2026, 0, 5, 8, 0, 0)>>
<<set $FirstMonday to new Date(2026, 0, 5, 8, 0, 0)>>
<<set $FirstTuesday to new Date(2026, 0, 6, 8, 0, 0)>>
<<set $FirstWednesday to new Date(2026, 0, 7, 8, 0, 0)>>
<<set $FirstThursday to new Date(2026, 0, 8, 8, 0, 0)>>
<<set $FirstFriday to new Date(2026, 0, 9, 8, 0, 0)>>
<<set $FirstSaturday to new Date(2026, 0, 10, 8, 0, 0)>>
<<set $FirstSunday to new Date(2026, 0, 11, 8, 0, 0)>>
<<set $Payday to new Date(2026, 0, 6, 8, 0, 0)>>
<<set $LastPaydayCheck to new Date(2026, 0, 6, 8, 0, 0)>>
onetime variable
<<set $MorgueConversation1 = 1>>
<<set $CrimeScene1 = 1>>
<<set $ZenMassageTalk1 = 1>>
<<set $rudeBitch1 = 0>>
<<set $Case1CigarEvidence1 = 0>>
<<set $MariaTalk1 = 1>>
<<set $EvelynTalk1 = 1>>
<<set $HaleyFirstMeet =1>>
<<set $MayorReport1 =1>>
<<set $MayorSecretary1 =1>>
<<set $RissaIntro =1>>
<<set $RissaFirstMeet =1>>
<<set $Gabbie1 = 1>>
<<set $SantiFirstMeet = 1>>
<<set $MarinaMeetUp to setup.changeDate($FirstSaturday, 'hours', 12)>>
<<set $MaryConfessionTime to setup.changeDate($FirstSunday, 'hours', 2)>>
<<set $MaryConfessionTime2 to setup.changeDate($FirstSunday, 'hours', 2)>>
<<set $SelenaBar1 = 1>>
<<set $RileyHouse1 = 1>>
<<set $GabbieBanker = 0>>
<<set $GymVoyeurCaught = 0>>
<<set $SamsonFirstMeet = 0>>
<<set $CarriePissed = 1>>
<<set $OliviaComplaint1 = 1>>
STATS
Money and Reputation
<<set $MCMoney = 500>>
<<set $MoneyInBank to 0>>
<<set $Reputation to 0>>
Moral
<<set $moral = 0>>
Death status
<<set $MCDeath = 0>>
Energy
<<set $maxEnergy to 50>>
<<set $energy to $maxEnergy>>
Common stats
<<set $Strength = 0>>
<<set $Endurance = 0>>
<<set $Intelligence = 0>>
<<set $Charisma = 0>>
END OF STATS
Artifact
<<set $Artifact1 = 1>>
<<set $Artifact2 = 1>>
Inventory
<<set $inventory = {
}>>
Hotel room bookingstatus
<<set $DeluxeRoomBookedTime to new Date(2026, 0, 5, 8, 0, 0)>>
<<set $JuniorSuiteBookedTime to new Date(2026, 0, 5, 8, 0, 0)>>
<<set $PremiumSuiteBookedTime to new Date(2026, 0, 5, 8, 0, 0)>>
Pawn shop
<<set $PawnShopItems = {
"Assassin Table": {
image: "img/item/assassintable.png",
description: "A gun hidden inside a table.",
details: "Table",
type: "Furniture",
price: 1000,
quantity: 1
},
"Obsidian Arrowhead": {
image: "img/item/artifact3.jpg",
description: "Unknown.",
details: "Unknown.",
type: "Artifact",
price: 4500,
quantity: 1
},
"White Diamond": {
image: "img/item/diamond.png",
description: "A piece of jewelry.",
details: "Diamond.",
type: "Jewelry",
price: 25000,
quantity: 1
},
"Lock Pick": {
image: "img/item/lockpick.jpg",
description: "A tool to open doors.",
details: "Used by thief.",
type: "Tool",
price: 200,
quantity: 1
},
"Creed Championship Belt": {
image: "img/item/creedcrown.png",
description: "Boxing title belt with Salt name on it.",
details: "Salt Creed's title belt.",
type: "Boxing title belt",
price: 5000,
quantity: 1
}
}>>
Sex shop
<<set $SexShopItems = {
"Purple Flask": {
image: "img/item/aphrodisiacflask.png",
description: "A flask filled with purple liquid.",
details: "",
type: "Flask",
price: 5000,
quantity: 1
},
"Silicone Dildo": {
image: "img/item/dildo1.png",
description: "A Silicone Dildo.",
details: "",
type: "Gift",
price: 500,
quantity: 1
},
"Vibrating Panties": {
image: "img/item/vibratingpanties.png",
description: "A Remote Control Vibrating Panties.",
details: "",
type: "Gift",
price: 1000,
quantity: 1
},
"Garlic Necklace": {
image: "img/item/garlicnecklace.png",
description: "A necklace made of garlic.",
details: "",
type: "necklace",
price: 2000,
quantity: 1
}
}>>
hunger
<<set $lastate to $now>>
<<set $hunger to 0>>
<<set $HospitalVisit = 0>>
affection/corruption
<<set $FrannyAffection = 0>>
<<set $FrannyCorruption = 0>>
<<set $frannylastate to new Date(2026, 0, 5, 8, 0, 0)>>
BSD Defense
<<set $BSDDefense to 0>>
Audio
<<cacheaudio "Gloryhole" "img/audio/gloryhole.mp3">>
<<cacheaudio "NightClub" "img/audio/nightclub.mp3">>
<<cacheaudio "NightclubBathroomSound" "img/audio/nightclubbathroomsound.mp3">>
<<cacheaudio "PhoneRingtone" "img/audio/phoneringtone.mp3">>
<<cacheaudio "ChurchConfession" "img/audio/churchconfession.mp3">>
<<cacheaudio "DoorKnocking" "img/audio/doorknocking.mp3">>
<<cacheaudio "ElevatorDing" "img/audio/elevatording.mp3">>
Criminal Case
<<set $Case1Solve = 0>>
<<set $Case2Solve = 0>>
<<set $Case3Solve = 0>>
Cheat code
<<set $cheatcodeNightclubCard = "NIGHTKEY007">>
<<set $cheatcodeAddMoney = "MONEYUP1000">>
<<set $cheatcodeAddMoral = "MORALUP5">>
<<set $cheatcodeSubMoral = "MORALDOWN5">>
<<set $cheatcodeAddStrength1 = "HERCULES1">>
<<set $cheatcodeAddEndurance1 = "PROMETHEUS1">>
<<set $cheatcodeAddIntelligence1 = "ATHENA1">>
<<set $cheatcodeAddCharisma1 = "APHRODITE1">>
<<set $prevPassage = 'SheriffOffice'>>
<<set $home = 'Wine Storage'>>
<<set $phoneWallpaper to "img/various/defaultwallpaper.png">>
<<set $contacts to []>>
<<set $wallpapers to ["img/various/defaultwallpaper.png"]>>
<<set $musicOn to true>>
<<set $musicVolume to 50>>
Contacts
<<run addContact("Joe", "img/various/unknown.png", "555-8518", "", "CallingJoe")>>
<<set $datingProfiles to [
{
name: "Sandra",
age: 25,
photo: "img/swindlergirls/sandraprofile.jpg",
bio: "Cosplayer and Exotic Dancer",
likePassage: "DateWithSandra"
},
{
name: "Kate",
age: 23,
photo: "img/swindlergirls/kateprofile.jpg",
bio: "Cosplayer and Gamer",
likePassage: "DateWithKate"
},
{
name: "Olivia",
age: 27,
photo: "img/swindlergirls/oliviaprofile.jpg",
bio: "Fitness enthusiast",
likePassage: "DateWithOlivia"
}
]>>
<<set $socialVideos to [
{
username: "Redhead69",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok1.mp4",
caption: "👉👌💦",
likes: 722728,
comments: 26324
},
{
username: "Redhead69",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok1.mp4",
caption: "🍆",
likes: 85256,
comments: 4255
},
{
username: "Redhead69",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok1.mp4",
caption: "💦💦💦",
likes: 234841,
comments: 15246
},
{
username: "goonlord",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok2.mp4",
caption: "So hot",
likes: 43218,
comments: 1859
},
{
username: "goonlord",
avatar: "img/social/avatar3.jpg",
video: "img/sextok/sextok10.mp4",
caption: "🍆🍆🍆",
likes: 813456,
comments: 44525
},
{
username: "Bowser67",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok4.mp4",
caption: "🥵💦",
likes: 245231,
comments: 15336
},
{
username: "Bowser67",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok7.mp4",
caption: "🫦🤤",
likes: 245241,
comments: 15426
},
{
username: "Petite Doll",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok5.mp4",
caption: "▶︎ •၊၊||၊|။||||။၊|• 0:30",
likes: 223441,
comments: 15126
},
{
username: "Petite Doll",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok15.mp4",
caption: "▶︎ •၊၊||၊|။||||။၊|• 0:30",
likes: 312341,
comments: 34416
},
{
username: "HaulGoddess43",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok6.mp4",
caption: "💦👅💋🔥",
likes: 135241,
comments: 16590
},
{
username: "Petite Doll",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok14.mp4",
caption: "( ͜.人 ͜.)¡ᶠᶸᶜᵏᵧₒᵤ!",
likes: 314541,
comments: 31326
},
{
username: "Gothee",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok8.mp4",
caption: "👅",
likes: 135441,
comments: 16433
},
{
username: "Blondie",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok18.mp4",
caption: "👅",
likes: 312311,
comments: 14523
},
{
username: "White bunnie01",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok11.mp4",
caption: "💋💋💋",
likes: 332211,
comments: 13423
},
{
username: "White bunnie01",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok12.mp4",
caption: "💋💋",
likes: 123441,
comments: 15233
},
{
username: "White bunnie01",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok13.mp4",
caption: "🔥🔥",
likes: 134345,
comments: 13689
},
{
username: "White bunnie01",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok16.mp4",
caption: "🔥🔥🔥",
likes: 234672,
comments: 13564
},
{
username: "White bunnie01",
avatar: "img/avatar/avatar13.png",
video: "img/sextok/sextok17.mp4",
caption: "🥵💦",
likes: 31131,
comments: 41213
}
]>>
<<set $currentVideoIndex to 0>>
<<set $shuffledVideos to []>><<dialogue $playerAvatar "You" "Hey. Think you could take me to The Reservation?">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "The reservation? Yeah, right, I'm not taking you to the reservation; I’ve got actual work to do">>
<<dialogue $playerAvatar "You" "Thanks for the ride, but I think I'll take it from here">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "See you later then, and don't forget to attend your own party">>
You didn't even have a chance to ask her what party before she drove off.
@@.option-button;[[Return to Salt's bar|Prologue24]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/thestreet.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/location/bar/saltbar.jpg" width=100%>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Well, look who’s back, This came for you earlier, right after you left...">>
Salt reaching under the counter. He pulls out a small package wrapped in plain brown paper and sets it on the bar.
<<dialogue $playerAvatar "You" "Must be the credentials from Joe">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Oh, still going for that sheriff thing, aren't you? Listen, here, take it, and leave this town">>
<<dialogue $playerAvatar "You" "Can't do it">>
Salt sighs, pulls out from his pocket $500, and places it on the counter.
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Why? You're free, man">>
You take the money. Before you leave, you remember that party Selena mentioned.
<<dialogue $playerAvatar "You" "Pay back in a few days... Argh, I almost forgot. Do you know anything about the party?">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Yeah, they throw a party every time this town has a new sheriff. You coming?">>
<<dialogue $playerAvatar "You" "Okay, got it">>
@@.option-button;[[Leave the bar|Prologue25]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/saltbar.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You decided to drive back to Carrie’s house. You park the car further down the street this time. Stepping out, you move closer to the house. There’s no plan, just an aching curiosity to see her again, to understand the life she’s built since you left.
From the side of the house, you catch sight of them through the dining room window.
@@.option-button;[[Continue|Prologue26]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/eastsideresident/eastsideresident.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>From your hidden spot, you can see straight into the kitchen. Carrie stands at the counter, slicing vegetables. Her daughter is at the table, leaning back in her chair, her phone in hand. The tension in the room is thick, even from a distance.
<img src="img/various/carrieandhaleyarguing.jpg" width=70% style="display: block; margin: 0 auto;">
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "ARGHH... Can't I have a good thing once in my life?">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Haley, we’ve been over this. Dad and I already booked a vacation for us next week. You have to come with us. How often do you have a chance to go on a trip with your family?">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Like we are a real family, Mom. All Dad does is work, work, work. He tries to act like he cares, but it’s all for show">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "What do you mean by that? Your dad has done nothing but fight for this family. Maybe if you weren’t so busy shutting him out—">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Shutting him out? He's shutting us out. You can keep pretending everything’s fine, but I won’t">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Haley, you don’t get to talk to your mother like that. You will come with us. End of story">>
The knife hits the cutting board with a loud clack as Carrie sets it down.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Whatever. I’m going to my room">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Haley!">>
Carrie calls after Haley, but Haley is already halfway up, her footsteps echoing loudly as she slams her bedroom door.
@@.option-button;[[Step on a tree branch|Prologue27]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/carrieandhaleyarguing.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
The sharp crack of a tree branch snapping beneath your boot sends a jolt through the quiet air. You freeze, cursing under your breath as the sound seems to echo louder than it should. Inside the house, Carrie’s head snaps toward the window, her brows knitting together in concern.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Who's there?">>
Carrie moves closer to the window, peering out into the darkness, her hands resting on the edge of the sink. The warm light from inside casts a faint glow over the yard, but the shadows you’re hiding in remain intact. You backpedal carefully, keeping low, trying not to make another sound.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Probably just a raccoon">>
@@.option-button;[[Return to the car|Prologue28]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/eastsideresident/eastsideresident.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.3) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.3) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You’re almost to your car when a firm hand suddenly claps you on the back. You whirl around instinctively, thinking you got caught. But instead, you find yourself face-to-face with the mayor.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Well, well. Didn’t expect to run into you out here, Sheriff">>
<<dialogue $playerAvatar "You" "Mayor, Just... getting a feel for the neighborhood">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Doing some late-night patrolling already? I like it. Shows initiative">>
<<dialogue $playerAvatar "You" "Always better to be thorough">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Hey, do you want a drink? My house is right over there">>
He glances toward Carrie’s house, his expression unreadable.
<<dialogue $playerAvatar "You" "That house?">>
You are a bit confused.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Yes. If you are not busy">>
<<dialogue $playerAvatar "You" "No, I mean yes, It's kind of late">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Oh, bummer, I’ll let you get back to it.">>
@@.option-button;[[Ask the mayor about the party|Prologue29]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/eastsideresident/eastsideresident.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.3) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.3) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue $playerAvatar "You" "Actually, Mayor, before you go, I have a quick question">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "What is it?">>
<<dialogue $playerAvatar "You" "The party, I realized I don’t have all the details. Time, location, things like that">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Ah, yes. The reception for the new sheriff. It's after your sworn-in ceremony. I’ll have my assistant email you all the details first thing tomorrow">>
<<dialogue $playerAvatar "You" "Got it. Appreciate it">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Of course. It’s important for the town to meet you, Sheriff">>
<<dialogue $playerAvatar "You" "Looking forward to it">>
The mayor nods once more before heading off down the street. You sit in your car; your grip tightens on the wheel as the reality strikes like a bolt of cold lightning. The guy who 'hired' you. He’s also Carrie’s current husband.
<<dialogue $playerAvatar "You" "What kind of mess have I gotten myself into?">>
@@.option-button;[[Wait till the party|Prologue30]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/eastsideresident/eastsideresident.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.3) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.3) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Sunday arrives, bringing with it the evening of your welcome party. The event is set in Bason’s most luxurious hotel.
Before you can gather yourself, the sound of heels clicking against pavement approaching draws your attention. A woman in her twenties, impeccably dressed in a staff uniform, pauses at the sight of you.
<img src="img/character/bianca/bianca.jpg" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/character/bianca/biancaavatar.jpg" "Bianca" "Good evening, sir, you must be Sheriff $PlayerInput. Come on in, we can’t have the guest of honor sulking in the parking lot. I’m Bianca, by the way">>
Bianca red lips curling into a practiced smile. Without waiting for a reply, she gestures toward the entrance.
<<dialogue $playerAvatar "You" "Where is Mayor Kendrick?">>
<<dialogue "img/character/bianca/biancaavatar.jpg" "Bianca" "He's by the pool the last time I see him, sir">>
<<dialogue $playerAvatar "You" "Thank you, Bianca">>
@@.option-button;[[Stroll around|Prologue31]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/theparty.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<nobr>><<if $PrologueHotelBossTalk == 1>>@@.option-button;[[Go meet the Hotel owner|PrologueHotelBossTalk]]@@<</if>>
<<if $PrologueArmsDealerTalk == 1>>@@.option-button;[[Go meet the great mustache man|PrologueArmsDealerTalk]]@@<</if>>
<<if $PrologueDrugDealerTalk == 1>>@@.option-button;[[Go meet the Chicken man|PrologueDrugDealerTalk]]@@<</if>>
<<if $PrologueSelenaTalk == 1>>@@.option-button;[[Go meet Selena|PrologueSelenaTalk]]@@<</if>><</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/theparty.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You spot a man in his sixties seated on a plush couch near the bar, surrounded by a small crowd. His suit is immaculate, a dark charcoal paired with a crisp black bow tie, and his silver head lends him a sharp, distinguished air. As you approach, he notices you; he rises slowly, extending a hand. A chuckle escapes him, low and gravelly.
<img src="img/character/donfadda/donfadda.png" width=70% style="display: block; margin: 0 auto;">
<<dialogue "img/character/donfadda/donfaddaavatar.png" "Don Fadda" "Ah, Sheriff $PlayerInput, I presume, the name’s Don Fadda. I own this fine establishment. the casino, and a few other ventures around Bason. I have been eager to meet our new sheriff for a while now">>
<<dialogue $playerAvatar "You" "I'm new to town, just getting to know the people">>
You shake his hand.
<<dialogue "img/character/donfadda/donfaddaavatar.png" "Don Fadda" "Here’s the thing about Bason. It’s the great American town that rewards the deserved and punishes the undeserved. And the people who survive here are the ones who understand that">>
<<dialogue $playerAvatar "You" "And I suppose you’re one of those people?">>
Fadda just laughs at your question. The woman beside him who immediately draws your attention. She’s stunning, her fiery brunette hair cascading down her shoulders in waves that seem almost too perfect to be natural. Her dress, a deep crimson that matches her lips, clings to her figure in all the right ways.
<<dialogue "img/character/donfadda/donfaddaavatar.png" "Don Fadda" "How inconsiderate of me! I was just about to introduce you to a very good friend of mine">>
The woman’s gaze shifts to you, and she gives a slow, sultry smile that could disarm anyone.
<<dialogue "img/character/donfadda/donfaddaavatar.png" "Don Fadda" "Lady Veronica Starling, the brilliant mind behind Chocolate Box Nightclub. A true... pillar of our community">>
<img src="img/character/veronica/veronica.png" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/character/veronica/veronicaavatar.jpg" "Veronica" "Pillar? Donny, you’re making me sound far too virtuous">>
<<dialogue $playerAvatar "You" "Veronica, I’ve heard the name">>
<<dialogue "img/character/donfadda/donfaddaavatar.png" "Don Fadda" "Don’t let her charm fool you, Sheriff. Veronica’s as sharp as they come">>
<<dialogue "img/character/veronica/veronicaavatar.jpg" "Veronica" "And Donny’s as flattering as ever. I’ll admit, I’m curious about our new sheriff">>
<<dialogue $playerAvatar "You" "Name’s $PlayerInput, spent most of my career in the small town of Barnesville, Pennsylvania">>
<<dialogue "img/character/veronica/veronicaavatar.jpg" "Veronica" "They drag you all the way here, aren't they?">>
<<dialogue $playerAvatar "You" "Pay better">>
<<dialogue "img/character/donfadda/donfaddaavatar.png" "Don Fadda" "I like you already">>
<<dialogue $playerAvatar "You" "If you’ll excuse me... I’ve got a few more hands to shake tonight. It’s been a pleasure talking to you two">>
<<nobr>><<if $PrologueMayorTalk == 5>>@@.option-button;[[Go meet the Mayor|PrologueMayorTalk]]@@<</if>>
<<if $PrologueArmsDealerTalk == 1>>@@.option-button;[[Go meet the great mustache man|PrologueArmsDealerTalk]]@@<</if>>
<<if $PrologueDrugDealerTalk == 1>>@@.option-button;[[Go meet the Chicken man|PrologueDrugDealerTalk]]@@<</if>>
<<if $PrologueSelenaTalk == 1>>@@.option-button;[[Go meet Selena|PrologueSelenaTalk]]@@<</if>>
<<set $PrologueHotelBossTalk = 0>>
<<set $PrologueMayorTalk += 1>><</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/theparty.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You spot Selena leaning casually against the railing of the grand staircase in her sharp uniform. You approach her, weaving through the clusters of mingling guests, and she notices you before you even say a word. Her brow arches slightly.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Sheriff. Enjoying your party?">>
<<dialogue $playerAvatar "You" "Selena, Didn’t expect to see you here, working">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "The mayor insisted I attend. Says it’s good for the department to show a united front. I’m not much for these kinds of things, though. I should get back to mingling. Duty calls">>
<<dialogue $playerAvatar "You" "Of course. See you around, Deputy">>
<<nobr>><<if $PrologueMayorTalk == 5>>@@.option-button;[[Go meet the Mayor|PrologueMayorTalk]]@@<</if>>
<<if $PrologueHotelBossTalk == 1>>@@.option-button;[[Go meet the Hotel owner|PrologueHotelBossTalk]]@@<</if>>
<<if $PrologueArmsDealerTalk == 1>>@@.option-button;[[Go meet the great mustache man|PrologueArmsDealerTalk]]@@<</if>>
<<if $PrologueDrugDealerTalk == 1>>@@.option-button;[[Go meet the Chicken man|PrologueDrugDealerTalk]]@@<</if>>
<<set $PrologueSelenaTalk = 0>><</nobr>>
<<set $PrologueMayorTalk += 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/theparty.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You’re introduced to a man sitting alone by the grand windows.
<img src="img/character/jack/jack.png" width=70% style="display: block; margin: 0 auto;">
<<dialogue "img/character/jack/jackavatar.png" "Jack" "Sheriff? Name’s Jack McMahon. I’m sure you’ve heard of me. If the PD needs any defense tools, I'd be glad to help, with a price, of course">>
The man turning as you approach. His voice is low and gravelly. He extends a hand, and you shake it firmly.
<<dialogue $playerAvatar "You" "I’m not in the market for that sort of thing">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "Of course, Sheriff. Of course. I’m not here to sell you anything. Just wanted to make sure you knew who I am. A town’s only as good as the people in charge, right? But it’s also only as safe as the people who can keep it that way">>
<<dialogue $playerAvatar "You" "Thanks, but I’ll manage">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "Suit yourself, Sheriff. Just remember, I’m around if you change your mind">>
<<nobr>><<if $PrologueMayorTalk == 5>>@@.option-button;[[Go meet the Mayor|PrologueMayorTalk]]@@<</if>>
<<if $PrologueHotelBossTalk == 1>>@@.option-button;[[Go meet the Hotel owner|PrologueHotelBossTalk]]@@<</if>>
<<if $PrologueDrugDealerTalk == 1>>@@.option-button;[[Go meet the Chicken man|PrologueDrugDealerTalk]]@@<</if>>
<<if $PrologueSelenaTalk == 1>>@@.option-button;[[Go meet Selena|PrologueSelenaTalk]]@@<</if>>
<<set $PrologueArmsDealerTalk = 0>>
<<set $PrologueMayorTalk += 1>><</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/theparty.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You find yourself stepping into a quieter corner of the party, your eyes scanning the crowd. Among the guests, you notice a man standing near the bar, his posture confident, the faintest hint of smugness in his expression. He’s dressed in a suit with a deep blue tie. There’s something about him that feels off. You approach him, and his sharp eyes lock onto you immediately. sizing you up with a look that suggests he’s not used to being caught off guard.
<img src="img/character/gus/gus.png" width=70% style="display: block; margin: 0 auto;">
<<dialogue $playerAvatar "You" "Nice to meet you. I’ve heard of your restaurants">>
<<dialogue "img/character/gus/gusavatar.png" "Gus" "You must be the new sheriff. Gus Frank, but call me like every kid that comes to my small kitchen would call, Chicken Man">>
<<dialogue $playerAvatar "You" "I hear you’re quite the businessman, 17 Chicken Brothers all around the country">>
<<dialogue "img/character/gus/gusavatar.png" "Gus" "But I can assure you, here in my hometown of Bason, the original Chicken Brother's quality is the best">>
<<dialogue $playerAvatar "You" "Can't wait to visit">>
<<dialogue "img/character/gus/gusavatar.png" "Gus" "Any time you please, sheriff">>
<<nobr>><<if $PrologueMayorTalk == 5>>@@.option-button;[[Go meet the Mayor|PrologueMayorTalk]]@@<</if>>
<<if $PrologueHotelBossTalk == 1>>@@.option-button;[[Go meet the Hotel owner|PrologueHotelBossTalk]]@@<</if>>
<<if $PrologueArmsDealerTalk == 1>>@@.option-button;[[Go meet the great mustache man|PrologueArmsDealerTalk]]@@<</if>>
<<if $PrologueSelenaTalk == 1>>@@.option-button;[[Go meet Selena|PrologueSelenaTalk]]@@<</if>>
<<set $PrologueDrugDealerTalk = 0>>
<<set $PrologueMayorTalk += 1>><</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/theparty.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
By the pool stood the mayor. Beside him, Carrie. You approached with measured steps, your eyes glued to Carrie.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Sheriff">>
<<dialogue $playerAvatar "You" "Mayor">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Sheriff, meet my better half. This is my wife, Carrie">>
Carrie had her back to you at first, her dark bob cut framing her neck, a sleek mini skirt accentuating her figure. When she turned, her laugh froze mid-air. Her eyes widened as if she’d just seen a ghost.
<img src="img/character/carrie/carrie.jpg" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "You...">>
<<dialogue $playerAvatar "You" "Good evening, Mrs. Kendrick">>
Carrie still in shock, her expression hardening. The mayor glanced between the two of you, his practiced smile faltering for just a moment.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "You two know each other? You looked like you just saw a ghost, Carrie">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "No, sorry, I don't know what is wrong with me, dear">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Well, have you met our subjects?">>
<<dialogue $playerAvatar "You" "Yes, interesting people. I'll admit. But I haven't got a chance to speak with Clayton Trigger">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "You're not going to see him here, sheriff, at a party like this">>
His attention shifted momentarily as someone called his name from across the patio.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Excuse me for a moment, Sheriff. Carrie, keep him company, will you? I’ll be right back">>
With that, the mayor strode off, leaving you and Carrie standing by the pool. The moment he was out of earshot, her smile vanished.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "What the hell are you doing here?">>
<<dialogue $playerAvatar "You" "Nice to see you too">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "You have no idea what kind of fire you’re playing with">>
<<dialogue $playerAvatar "You" "I wasted 20 years for you, Carrie. I come here for you">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "For me? You don’t belong here; you bring danger here">>
She knows there is no point in talking with you. She lowered her voice to a harsh whisper. Then she turned and walked away.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Stay out of my way. Stay out of my life">>
@@.option-button;[[Party over|PrologueBiancaTalk]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/theparty.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You stroll around until the party is over, and as you make your way toward the exit, you see her. Bianca stands there, half in shadow, her back pressed against a pillar. A man you don’t recognize, tall, rough around the edges, leans in, his hand grapping her butt as she tries to pull away.
<<dialogue "img/various/unknown.png" "???" "Come on, sweetheart...Don’t act like you’re better than me...">>
Your footsteps cut through the hum of the party, and before the man can even turn, your fist connects square with his jaw. The crack of impact snaps the night open. He stumbles back, hitting the pavement hard, groaning as he clutches his face.
<<dialogue $playerAvatar "You" "You okay?">>
The man spits, dazed, eyes darting between you and Bianca. He mutters something under his breath and staggers away, disappearing into the dark.
<<dialogue "img/character/bianca/biancaavatar.jpg" "Bianca" "Yeah. He’s just another drunk idiot who doesn’t know when to quit. Thanks for stepping in, Sheriff. You’ve got good timing. Come on. Let me thank you properly">>
<<dialogue $playerAvatar "You" "How can I refuse this?">>
<<dialogue "img/character/bianca/biancaavatar.jpg" "Bianca" "Anything for you">>
Bianca smiles, a slow, deliberate curve of her lips, She then signals you to follow her to the staff room.
@@.option-button;[[Follow her|Prologue32]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/theparty.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Without a heads up, you feel a surge of excitement as Bianca unzips your jeans, pulls out your cock, and presses it against her bare chest, teasing it with her soft skin; you can sense the desire emanating from her body.
<img src="img/character/bianca/biancablowjob2.webp" style="display: block; margin: 0 auto;">
<<dialogue "img/character/bianca/biancaavatarsex1.webp" "Bianca" "Mmm... yes... like that...">>
Bianca's mouth is warm and tight around your cock; her every breath makes it harden. She teases you by licking it up and down and sucking at the tip.
<<dialogue "img/character/bianca/biancaavatarsex2.webp" "Bianca" "SHLOP~SHLOP~SHLOP">>
She suddenly takes it whole; her throat barely fits your cock. Her tongue swirling and flicking. You grab Bianca's head and start fucking her mouth pussy. Bianca moans loudly as you thrust into her mouth, her hands gripping your hips for support.
<<dialogue "img/character/bianca/biancablowjob2.webp" "Bianca" "GLOCK~GLOCK~">>
As you continue to fuck her mouth, Bianca's body trembles with arousal. Her voice muffled by your cock.
<<dialogue $playerAvatar "You" "I'm about to... Bianca">>
Bianca feels your cock swelling, her eyes widening in anticipation. Her hands still gripping your hips. You unleash your load on her face.
<img src="img/character/bianca/biancablowjob.webp" width=100%>
<<dialogue "img/character/bianca/biancaavatarsex.png" "Bianca" "ogh~ogh~ogh~">>
A pleased moan escapes her as she swallows your cum. She breathes, her chest heaving.
<<dialogue "img/character/bianca/biancaavatarsex.png" "Bianca" "How is... my service?">>
<<dialogue $playerAvatar "You" "That was... unreal,">>
Your cock still drowning in Bianca's saliva.
<<dialogue "img/character/bianca/biancaavatarsex.png" "Bianca" "There's more where that came from">>
<<dialogue $playerAvatar "You" "Too bad I will have to deny that offer; I start working tomorrow">>
@@.option-button;[[Leave the Hotel|Prologue33]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/theparty.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/theparty.jpg" width=70% style="display: block; margin: 0 auto;">
@@.option-button;[[Go to sleep|Prologue34]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/theparty.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/dreamsex1.webp" width=40% style="display: block; margin: 0 auto;">
You have a lovely dream
@@.option-button;[[Wake up|Prologue35]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/starrynight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You push open the glass door of the Bason Sheriff Department, the bell above jingling softly as you step inside. Donna, the receptionist, looks up from her computer. She blinks in surprise before offering a polite smile.
<<dialogue "img/character/donna/donnaavatar.jpg" "Donna" "Good morning, Sheriff">>
<<dialogue $playerAvatar "You" "Morning, looks like it’s going to be a busy day">>
Behind the desk, the familiar hum of activity filters through an open doorway. Your ufficers are moving around, papers shuffle, and the occasional burst of laughter echoes from a corner.
<<dialogue "img/character/david/david.png" "David" "Sheriff, good morning. The report for the current cases is on your table, sir">>
<<dialogue $playerAvatar "You" "Thanks, I'll check it">>
You make your way to your office. The space is functional, with a sturdy desk, a filing cabinet, and a window that overlooks the street. Sitting down, you take a deep breath. Your first day as sheriff has begun.
@@.option-button;[[Let's check the reports|Job1Case1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="styled-line"></div>
Case 3: The Murder of Rebecca Lannigan
Victim: Rebecca Lannigan
<img src="img/various/rebeccalanniganautopsy.png" width=100%>
Age: 22
Last seen: 27/12/2025, leaving her shift at the Route 9 Diner around 11:00 PM.
Discovery: Her body was found three days later in the woods, roughly ten miles from her home. Cause of death was determined to be blunt force trauma to the back of the victim's head, with signs of a struggle.
Details: Rebecca Lannigan was born in Bason, the only child of Tom and Elaine Lannigan( both deceased). she currently living with her aunt, Cassie Lannigan, a familiar face in the community. Rebecca is known for her friendly demeanor and strong work ethic. Rebecca is a college student at Bason College. After school, she works as a waitress at Route 9 Diner till 11 PM, a routine she has followed since starting college two years ago.
The night of her disappearance, Rebecca left her shift as usual, heading home on foot. When she didn’t return, her aunt reported her missing the next morning. Her body was discovered three days later in the woods, concealed under a layer of brush. Investigators noted signs of a struggle, but no personal belongings—such as her phone or purse—were found at the scene.
<div class="styled-line"></div>
<<dialogue $playerAvatar "You" "Where to start?">>
@@.option-button;[[End of Prologue|Prologue36]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Reaching for David's reports, you flip it open.
<div class="styled-line"></div>
Case 1: The Farm Slasher
Incident: Livestock killings on the outskirts of Bason.
<img src="img/various/livestock.jpg" width=100%>
Victims: 15 livestock (cattle, goat, sheep) and three family pets over the last four months.
Farms affected: three properties on the outskirts of town—each within a five-mile radius.
Discovery:
The animals are found with precise wounds—throats slashed or punctured, with no signs of feeding. Most killings occur on raining nights. No tracks or traces of a predator have been found near the bodies.
Details:
The killings began quietly, with a few farmers chalking up the deaths to wild animals. However, as the attacks grew more frequent—and more gruesome—rumors started to spread. Some blame a rogue animal, others whisper about something darker: a person deliberately targeting the farms.
The Bason PD investigated briefly but found no solid evidence of a culprit, human or otherwise.
<div class="styled-line"></div>
@@.option-button;[[Next case|Job1Case2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="styled-line"></div>
Case 2: The Silent Burglar
Incident: A burglary at Granna Grant Bakery.
<img src="img/various/bakeryburglary.jpg" width=100%>
Stolen Items: 3 brownies, cash, and rare collectibles Bakery trophy at approximately $3200.
Discovery: Discovered by Mrs. Grant when she came to work in the morning of 13/12/2025. No signs of forced entry were found.
<div class="styled-line"></div>
@@.option-button;[[Next case|Job1Case3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You have reached the end of the prologue. Thank you for playing and exploring this miniproject of mine. Your support means a lot as this project continues to grow.
This took me ages to finish, but it is just the beginning—there are so many things I want to include in this game. If you have any feedback or thoughts about what you’ve played so far, I’d love to hear them. Until next time!
Prologue summary:
After spending 20 years behind bars, all you have left is a single purpose—finding your ex-girlfriend. Your search leads you to the gritty town of Bason, but fate has other plans. Through a twist of circumstances, you end up wearing the badge as the town's new sheriff. Now, caught between your past and a town full of secrets, your journey truly begins.
<<if !$PlayerInput>>
<<set $PlayerInput to "">>Enter your name:<<textbox "$PlayerInput" "">>
<</if>>
@@.option-button;[[Lets go|GuildPassage]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner3.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<set $inventory = {
"Sandwich": {
image: "img/item/sandwich.jpg",
description: "A sandwich with ham.",
details: "A sandwich.",
type: "Consumable",
price: 5,
quantity: 1
},
"GLOCK 22": {
image: "img/item/policegun.png",
description: "Standard police gun.",
details: "A gun.",
type: "Weapon",
price: 5,
quantity: 1
},
"Rebecca's Case": {
image: "img/various/rebeccalanniganautopsy.png",
description: "Murder case file.",
details: "Rebecca's Case File",
type: "File",
price: 0,
quantity: 1
},
}>>
<<script>>
updateGuideTextForStoryline("Chapter I Guide", "Go to the morgue");
updateGuideTextForStoryline("Rissa", "Sneak into the warehouse at night");
updateGuideTextForStoryline("Selena", "Solve Rebecca's case");
updateGuideTextForStoryline("Riley", "Solve Rebecca's case");
updateGuideTextForStoryline("Haley", "Talk to Haley in the university hallway in the morning");
updateGuideTextForStoryline("Gabbie", "Talk to the mayor's secretary, then come to the bank");
updateGuideTextForStoryline("Evelyn", "Get injured or starved more often. That's how you get to talk to doctors, duh.");
updateGuideTextForStoryline("Maria", "Talk to Sister Maria in the church");
updateGuideTextForStoryline("Cassie", "Talk to Rebecca's aunt, Cassie at her Massage Parlor, Northside");
updateGuideTextForStoryline("Danni", "Investigate the Rebecca's case crime scene");
updateGuideTextForStoryline("Olivia", "Maybe you can find some ways to annoy her during your hotel stay");
<</script>><<set _dest = "Chapter1Map">>
<<if $Chapter2 == 1>>
<<set _dest = "Chapter2Map">>
<</if>>
<<goto _dest>>A Game By DraemGaem || Bason CHAPTER II v0.2.0<<if $playerAvatar>><div class="ui-avatar-section">
<img @src="$playerAvatar" class="ui-avatar" alt="Character Avatar">
</div><</if>><<set $hunger to $now-$lastate>><<nobr>>
<div class="ui-time-display">
<div class="ui-time-day"><<= setup.getWeekday($now)>>, <<= setup.getFormattedDate($now, 'eu')>></div>
<div class="ui-time-period">
<<if setup.isMorning($now)>>☀️ Morning
<<elseif setup.isAfternoon($now)>>🌤️ Afternoon
<<elseif setup.isEvening($now)>>🌆 Evening
<<elseif setup.isNight($now)>>🌙 Night
<</if>>
</div>
<div class="ui-time-clock"><<= setup.getFormattedTime($now, '24hour-seconds')>></div>
</div>
<h2>Resources</h2>
<!-- Money & Reputation -->
<div class="ui-money-display">
<div class="ui-money-item">
<span class="ui-money-label">💵 Cash</span>
<span class="ui-money-value">$<<= $MCMoney>></span>
</div>
<div class="ui-money-item">
<span class="ui-money-label">🏦 Bank</span>
<span class="ui-money-value">$<<= $MoneyInBank>></span>
</div>
<div class="ui-money-item">
<span class="ui-money-label">⭐ Rep</span>
<span class="ui-money-value"><<= $Reputation>></span>
</div>
</div>
<!-- Energy & Hunger in one row -->
<div class="ui-status-row">
<!-- Energy (Left) -->
<div class="ui-stat-compact">
<div class="ui-stat-label">⚡ Energy</div>
<div class="ui-energy-bar-compact">
<<set _energyPercent = ($energy / $maxEnergy) * 100>>
<div class="ui-energy-fill" @style="'width: ' + _energyPercent + '%'"></div>
<div class="ui-energy-text"><<= $energy>>/<<= $maxEnergy>></div>
</div>
</div>
<!-- Hunger (Right) -->
<div class="ui-stat-compact">
<div class="ui-stat-label">🍽️ Hunger</div>
<div class="ui-stat-value
<<if $hunger <= 86400000>>hunger-stuffed
<<elseif $hunger > 86400000 && $hunger <= 172800000>>hunger-hungry
<<else>>hunger-starving
<</if>>">
<<if $hunger <= 86400000>>Stuffed
<<elseif $hunger > 86400000 && $hunger <= 172800000>>Hungry
<<else>>Starving!
<</if>>
</div>
</div>
</div>
<h2>Attributes</h2>
<!-- Attributes Grid -->
<div class="ui-attributes">
<div class="ui-attribute">
<div class="ui-attribute-label">💪 STR:</div>
<div class="ui-attribute-value"><<= $Strength>></div>
</div>
<div class="ui-attribute">
<div class="ui-attribute-label">🛡️ END:</div>
<div class="ui-attribute-value"><<= $Endurance>></div>
</div>
<div class="ui-attribute">
<div class="ui-attribute-label">🧠 INT:</div>
<div class="ui-attribute-value"><<= $Intelligence>></div>
</div>
<div class="ui-attribute">
<div class="ui-attribute-label">💬 CHA:</div>
<div class="ui-attribute-value"><<= $Charisma>></div>
</div>
</div>
<h2>Morality</h2>
<!-- Moral Spectrum -->
<div class="moral-spectrum">
<<set _moralPercent = (($moral + 100) / 200) * 100>>
<div class="moral-marker" @style="'left: calc(' + _moralPercent + '% - 6px)'"></div>
</div>
<div class="moral-labels">
<span>😈</span>
<span>😇</span>
</div><</nobr>>You sit at your desk, staring at the three case files spread out before you. You must admit there is only one case that interests you.
Rebecca Lannigan.
A young woman, born and raised in Bason. No known enemies. A quiet life. Then, one night, she vanishes—only to be found three days later, discarded in the woods like an afterthought. Something about it doesn’t sit right. You close the other files and push them aside. This is the one. Your first case as sheriff, and you're not letting it collect dust like the others. You stand up, grab your coat, and step out of your office. The station hums with quiet activity. You spot David, near the front desk.
<<dialogue $playerAvatar "You" "David, Where’s Rebecca Lannigan’s body?">>
<<dialogue "img/character/david/david.png" "David" "The morgue. Dr. Morgan’s handling the autopsy. You taking this one, sir?">>
<<dialogue $playerAvatar "You" "Yeah. I’m heading there now">>
@@.option-button;[[Lets go|End of Prologue]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">BSD</div>
<<setPassageVariableMap>>
@@.option-button;[[Get inside|BSDInside]]@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/pawnshop/pawnshop.png][PawnShop]]>><</button>>
<div class="location-name"><b>Pawn Shop</b></div>
</td>
<td class="locked">
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>You are here</b></div>
</td>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Town Square</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Mall</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/chicken/chicken.jpg][ChickenBrother]]>><</button>>
<div class="location-name"><b>Chicken Brother</b></div>
</td>
<td>
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>Court</b></div>
</td>
<td>
<<button [img[img/location/townhall/townhall.jpg][TownHall]]>><</button>>
<div class="location-name"><b>Town Hall</b></div>
</td>
<td>
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>Bank</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Church</b></div>
</td>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Park</b></div>
</td>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Hospital</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsd.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Sheriff Office</div>
<<setPassageVariableNoMap>>
<<nobr>>
@@.option-button;[[Your PC]]@@
<<if setup.isMorning($now)>>
<<if $RobertoVisit == 1>>@@.option-button;[[You have a guest|Case1Guest]]@@<</if>>
<</if>>
<<if $Case1Solve == 2 && $MarinaLetterRead1 == 1>>
@@.option-button;[[Read the letter|MarinaLetter1]]@@
<</if>>
<<if $McMahonPlan1 == 1 and $Intelligence >= 3>>
@@.option-button;[[Set up a plan to take down Jack McMahon|McMahonPlan1]]@@
<<elseif $McMahonPlan1 == 1>>
@@.option-button-disabled;Set up a plan to take down Jack McMahon • 🧠 Intelligence 3@@
<</if>>
<<if $DavidReport1 == 1 && $now >= $DavidReportTime1>>
@@.option-button;[[David|DavidReport1]]@@
<</if>>
<<if $SheriffOfficePlanning1 == 1 and $Intelligence >= 5>>
@@.option-button;[[Think|SheriffOfficePlanning1Part1]]@@
<<elseif $SheriffOfficePlanning1 == 1>>
@@.option-button-disabled;Think • 🧠 Intelligence 5@@
<</if>>
<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/squadroom.jpg][SquadRoom]]>><</button>>
<div class="location-name"><b>Squad Room</b></div>
</td>
<td>
<<button [img[img/location/bsd/emptyarmory.png][Armory]]>><</button>>
<div class="location-name"><b>Armory</b></div>
</td>
<td>
<<button [img[img/location/bsd/morgue.jpg][Morgue]]>><</button>>
<div class="location-name"><b>Morgue</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/bsd/cell.jpg][Cell]]>><</button>>
<div class="location-name"><b>Cell Rooms</b></div>
</td>
<td>
<<button [img[img/location/bsd/firingrange.png][FiringRange]]>><</button>>
<div class="location-name"><b>Firing Range</b></div>
</td>
<td>
<<button [img[img/location/bsd/bsdreception.png][BSDInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Morgue</div>
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
<<if $MorgueConversation1 == 1 and $Intelligence >= 1 and $energy >= 10>>
@@.option-button;<<link "Examine Rebecca's body">><<goto "Morgue1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $MorgueConversation1 == 1>>
@@.option-button-disabled;Examine Rebecca's body • 🧠 Intelligence 1 • ⚡ Energy 10@@<</if>>
<<if $MorgueConversation2 == 1 and $Intelligence >= 1 and $energy >= 10>>
@@.option-button;<<link "Examine the cigar">><<goto "Morgue2">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $MorgueConversation2 == 1>>
@@.option-button-disabled;Examine the cigar • 🧠 Intelligence 1 • ⚡ Energy 10@@<</if>>
<<if $MorgueConversation3 == 1 && $now >= $CigarExamine and $Intelligence >= 1 and $energy >= 10>>
@@.option-button;<<link "Examine the cigar (Result)">><<goto "Morgue3">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $MorgueConversation3 == 1 && $now >= $CigarExamine>>
@@.option-button-disabled;Examine the cigar (Result) • 🧠 Intelligence 1 • ⚡ Energy 10@@<</if>>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/sheriffoffice.png][SheriffOffice]]>><</button>>
<div class="location-name"><b>Sheriff Office</b></div>
</td>
<td>
<<button [img[img/location/bsd/squadroom.jpg][SquadRoom]]>><</button>>
<div class="location-name"><b>Squad Room</b></div>
</td>
<td>
<<button [img[img/location/bsd/emptyarmory.png][Armory]]>><</button>>
<div class="location-name"><b>Armory</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/bsd/firingrange.png][FiringRange]]>><</button>>
<div class="location-name"><b>Firing Range</b></div>
</td>
<td>
<<button [img[img/location/bsd/cell.jpg][Cell]]>><</button>>
<div class="location-name"><b>Cell Rooms</b></div>
</td>
<td>
<<button [img[img/location/bsd/bsdreception.png][BSDInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/morgue.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Squad Room</div>
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
@@.option-button;[[David]]@@
@@.option-button;[[Selena]]@@
@@.option-button;[[Riley]]@@
<<if $Case1Meeting == 1>>@@.option-button;[[Gather the team|Case1Meeting]]@@
<<elseif $Case1Selena == 1>>@@.option-button;[[Where is Selena?|Case1CaughtTheMurderer1]]@@<</if>>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/sheriffoffice.png][SheriffOffice]]>><</button>>
<div class="location-name"><b>Sheriff Office</b></div>
</td>
<td>
<<button [img[img/location/bsd/firingrange.png][FiringRange]]>><</button>>
<div class="location-name"><b>Firing Range</b></div>
</td>
<td>
<<button [img[img/location/bsd/emptyarmory.png][Armory]]>><</button>>
<div class="location-name"><b>Armory</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/bsd/morgue.jpg][Morgue]]>><</button>>
<div class="location-name"><b>Morgue</b></div>
</td>
<td>
<<button [img[img/location/bsd/cell.jpg][Cell]]>><</button>>
<div class="location-name"><b>Cell Rooms</b></div>
</td>
<td>
<<button [img[img/location/bsd/bsdreception.png][BSDInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if $SquadRoomMeeting1 == 1>><<goto "SquadRoomMeeting1">><</if>>
<<if $OneWeekWarMeeting == 1 && $now >= $RoughWeek1>><<goto "SquadRoomMeeting3">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Armory</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/sheriffoffice.png][SheriffOffice]]>><</button>>
<div class="location-name"><b>Sheriff Office</b></div>
</td>
<td>
<<button [img[img/location/bsd/squadroom.jpg][SquadRoom]]>><</button>>
<div class="location-name"><b>Squad Room</b></div>
</td>
<td>
<<button [img[img/location/bsd/firingrange.png][FiringRange]]>><</button>>
<div class="location-name"><b>Firing Range</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/bsd/morgue.jpg][Morgue]]>><</button>>
<div class="location-name"><b>Morgue</b></div>
</td>
<td>
<<button [img[img/location/bsd/cell.jpg][Cell]]>><</button>>
<div class="location-name"><b>Cell Rooms</b></div>
</td>
<td>
<<button [img[img/location/bsd/bsdreception.png][BSDInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/emptyarmory.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">University</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<<if setup.isOpeningHours($now)>>
<td>
<<button [img[img/location/university/footballfield.png][Football field]]>><</button>>
<div class="location-name"><b>Football field</b></div>
</td>
<td>
<<button [img[img/location/university/universityhallway.png][University Hallway]]>><</button>>
<div class="location-name"><b>Hallway</b></div>
</td>
<<elseif $inventory["Lock Pick"]>>
<td>
<<button [img[img/various/locked.png][University Break In]]>><</button>>
<div class="location-name"><b>Break in</b></div>
</td>
<<else>>
<td class="locked">
<<button [img[img/various/locked.png][University Break In]]>><</button>>
<div class="location-name"><b>Break in</b></div>
</td><</if>>
<td>
<<button [img[img/location/southside/southside.jpg][South Side]]>><</button>>
<div class="location-name"><b>South Side</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Church - midtown</b></div>
</td>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Park - midtown</b></div>
</td>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Hospital - midtown</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/university.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Park</div>
<<setPassageVariableMap>>
<<nobr>>
@@.option-button;[[Go for a walk|Go for a walk]]@@
@@.option-button;[[Sit on a bench]]@@
<<if $ParkShootout1 == 1>>@@.option-button;[[Go to the crime scene|ParkShootoutCrineScene1]]@@<</if>>
<<set _before to setup.changeDate($CarrieParkMeetTime, 'hours', -2)>><<set _after to setup.changeDate($CarrieParkMeetTime, 'hours', 2)>>
<<if $now.getTime() >= _before.getTime() and $now.getTime() <= _after.getTime() and $CarrieParkTalk1 == 1>>
@@.option-button;[[Meet Carrie|CarrieParkTalk1]]@@
<<elseif $now >= $CarrieParkMeetTime && $CarrieParkTalk1 == 1>>
@@.option-button;[[Meet Carrie|CarrieParkTalk1]]@@
<</if>>
<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>BSD</b></div>
</td>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Town Square</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Mall</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>Court</b></div>
</td>
<td>
<<button [img[img/location/townhall/townhall.jpg][TownHall]]>><</button>>
<div class="location-name"><b>Town Hall</b></div>
</td>
<td>
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>Bank</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Church</b></div>
</td>
<td class="locked">
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>You are here</b></div>
</td>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Hospital</b></div>
</td>
<td>
<<button [img[img/location/university/university.png][University]]>><</button>>
<div class="location-name"><b>University</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/park/park.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Salt Bar</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bar/barinside.jpg][SaltBarInside]]>><</button>>
<div class="location-name"><b>Get inside</b></div>
</td>
<td>
<<button [img[img/location/westside/westside.jpg][West Side]]>><</button>>
<div class="location-name"><b>West Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/saltbar.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Carrie House</div>
<<setPassageVariableMap>>
<<nobr>>
<<if $inventory["HaleyExam"]>>
@@.option-button;[[Talk to Haley|HaleyTalk3]]@@
<</if>>
<<if $CarrieHouseSpying1 == 1 and $Endurance >= 5 and $energy >= 10>>
@@.option-button;<<link "Spy On Carrie">><<goto "CarrieSpying1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $CarrieHouseSpying1 == 1>>
@@.option-button-disabled;Spy On Carrie • 🛡️ Endurance 5 • ⚡ Energy 10@@
<</if>>
<<if $HaleyStalking1 == 1 and $Endurance>= 5 and $energy >= 10>>
@@.option-button;<<link "Spy On Haley">><<goto "HaleyStalking1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $HaleyStalking1 == 1>>
@@.option-button-disabled;Spy On Haley • 🛡️ Endurance 5 • ⚡ Energy 10@@
<</if>>
<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/eastsideresident/eastsideresident.jpg][East Residential Area]]>><</button>>
<div class="location-name"><b>East Residential Area</b></div>
</td>
</tr>
</table><</nobr>>
<<if $CarriePissed == 1>><b><<run setup.showNotification("Carrie is still pissed at you, better stay away from her for now")>></b><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/carriehouse/carriehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><b>Current location: Casino</b>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/westside/westside.jpg][West Side]]>><</button>>
<div class="location-name"><b>West Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/casino/casino.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Hotel</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hotel/hotelinside.png][HotelInside]]>><</button>>
<div class="location-name"><b>Get inside</b></div>
</td>
<td>
<<button [img[img/location/westside/westside.jpg][West Side]]>><</button>>
<div class="location-name"><b>West Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotel.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Nightclub</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<<if setup.isEvening($now) or setup.isNight($now)>>
<td>
<<button [img[img/location/nightclub/viproom.jpg][NightclubInside]]>><</button>>
<div class="location-name"><b>Get inside</b></div>
</td>
<<else>>
<td class="locked">
<<button [img[img/various/locked.png][NightclubInside]]>><</button>>
<div class="location-name"><b>CLOSED</b></div>
</td>
<</if>>
<td>
<<button [img[img/location/westside/westside.jpg][West Side]]>><</button>>
<div class="location-name"><b>West Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/nightclub0.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Abandoned Mine</div>
<<setPassageVariableMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/southside/southside.jpg][South Side]]>><</button>>
<div class="location-name"><b>South Side</b></div>
</td>
<td>
<<button [img[img/location/abandonedmine/southapartment.png][South Apartment]]>><</button>>
<div class="location-name"><b>South Apartment</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/abandonedmine/abandonedmine.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Town Square</div>
<<setPassageVariableMap>>
@@.option-button;[[Flower Vendor]]@@
@@.option-button;[[Fountain]]@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>BSD</b></div>
</td>
<td class="locked">
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>You are here</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Mall</b></div>
</td>
<td>
<<button [img[img/location/pawnshop/pawnshop.png][PawnShop]]>><</button>>
<div class="location-name"><b>Pawn Shop</b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>Court</b></div>
</td>
<td>
<<button [img[img/location/townhall/townhall.jpg][TownHall]]>><</button>>
<div class="location-name"><b>Town Hall</b></div>
</td>
<td>
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>Bank</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Church</b></div>
</td>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Park</b></div>
</td>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Hospital</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townsquare/townsquare.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Church</div>
<<setPassageVariableMap>>
<<if setup.isOpeningHours($now)>>@@.option-button;[[Get Inside|ChurchInside]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>BSD</b></div>
</td>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Town Square</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Mall</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/chicken/chicken.jpg][ChickenBrother]]>><</button>>
<div class="location-name"><b>Chicken Brother</b></div>
</td>
<td>
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>Court</b></div>
</td>
<td>
<<button [img[img/location/townhall/townhall.jpg][TownHall]]>><</button>>
<div class="location-name"><b>Town Hall</b></div>
</td>
<td>
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>Bank</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/university/university.png][University]]>><</button>>
<div class="location-name"><b>University</b></div>
</td>
<td class="locked">
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>You are here</b></div>
</td>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Park</b></div>
</td>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Hospital</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/church.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Gun Store</div>
<<setPassageVariableMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<<if setup.isOpeningHours($now)>>
<td>
<<button [img[img/location/gunstore/gunstore.jpg][GunStoreInside]]>><</button>>
<div class="location-name"><b>Get inside</b></div>
</td>
<<else>>
<td class="locked">
<<button [img[img/various/locked.png][GunStoreInside]]>><</button>>
<div class="location-name"><b>CLOSED</b></div>
</td>
<</if>>
<td>
<<button [img[img/location/northside/northside.png][North Side]]>><</button>>
<div class="location-name"><b>North Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gunstore/gunstorefront.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Bank</div>
<<setPassageVariableMap>>
<<if setup.isOpeningHours($now)>>@@.option-button;[[Get inside|BankInside]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>BSD</b></div>
</td>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Town Square</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Mall</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>Court</b></div>
</td>
<td>
<<button [img[img/location/townhall/townhall.jpg][TownHall]]>><</button>>
<div class="location-name"><b>Town Hall</b></div>
</td>
<td class="locked">
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>You are here</b></div>
</td>
<td>
<<button [img[img/location/warehouse/warehouse.png][Warehouse]]>><</button>>
<div class="location-name"><b>Warehouse</b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Church</b></div>
</td>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Park</b></div>
</td>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Hospital</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/bank.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Hospital</div>
<<setPassageVariableMap>>
@@.option-button;[[Get inside|HospitalInside]]@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>BSD</b></div>
</td>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Town Square</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Mall</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>Court</b></div>
</td>
<td>
<<button [img[img/location/townhall/townhall.jpg][TownHall]]>><</button>>
<div class="location-name"><b>Town Hall</b></div>
</td>
<td>
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>Bank</b></div>
</td>
<td>
<<button [img[img/location/warehouse/warehouse.png][Warehouse]]>><</button>>
<div class="location-name"><b>Warehouse</b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Church</b></div>
</td>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Park</b></div>
</td>
<td class="locked">
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>You are here</b></div>
</td>
<td>
<<button [img[img/location/university/university.png][University]]>><</button>>
<div class="location-name"><b>University</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>><<if $HospitalBill == 1 >>
<<if $MCMoney >= 500>>
<<set $MCStarve = 0>>
<<set $MCMoney -= 500>>
<<set $HospitalBill = 0>>
<<set $MCDeath = 0>>
<<else>>
<<goto "NEUTRALEnding1Bundle2">>
<</if>>
<</if>><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/hospital.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Mall</div>
<<setPassageVariableMap>><<if setup.isOpeningHours($now)>>
@@.option-button;[[Get inside|MallInside]]@@
<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>BSD</b></div>
</td>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Town Square</b></div>
</td>
<td class="locked">
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>You are here</b></div>
</td>
<td>
<<button [img[img/location/pawnshop/pawnshop.png][PawnShop]]>><</button>>
<div class="location-name"><b>Pawn Shop</b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>Court</b></div>
</td>
<td>
<<button [img[img/location/townhall/townhall.jpg][TownHall]]>><</button>>
<div class="location-name"><b>Town Hall</b></div>
</td>
<td>
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>Bank</b></div>
</td>
<td>
<<button [img[img/location/warehouse/warehouse.png][Warehouse]]>><</button>>
<div class="location-name"><b>Warehouse</b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Church</b></div>
</td>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Park</b></div>
</td>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Hospital</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/mall.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Pawn Shop</div>
<<setPassageVariableMap>>
<<nobr>><<if setup.isNight($now) && $inventory["Key Makers Toolbox"] && $PawnShopItems["Creed Championship Belt"] && $RoughWeek1 and $Intelligence >= 5 and $energy >= 10>>
@@.option-button;<<link "Break in">><<goto "PawnShopSteal1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif if setup.isNight($now) && $inventory["Key Makers Toolbox"] && $PawnShopItems["Creed Championship Belt"] && $RoughWeek1>>
@@.option-button-disabled;Break in • 💬 Intelligence 5 •⚡ Energy 10@@<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<<if setup.isOpeningHours($now)>>
<td>
<<button [img[img/location/pawnshop/pawnshopinside.jpg][InsidePawnshop]]>><</button>>
<div class="location-name"><b>Get inside</b></div>
</td>
<<else>>
<td class="locked">
<<button [img[img/various/locked.png][InsidePawnshop]]>><</button>>
<div class="location-name"><b>CLOSED</b></div>
</td>
<</if>>
<td>
<<button [img[img/location/northside/northside.png][North Side]]>><</button>>
<div class="location-name"><b>North Side</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>BSD - midtown</b></div>
</td>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Town Square - midtown</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Mall - midtown</b></div>
</td>
</tr>
</table><</nobr>>
<<script>>
/* Neo-Noir Pawn Shop System for Twine SugarCube */
if (!setup.pawnShop) {
setup.pawnShop = {
// Add a new item to the shop
addShopItem: function(itemName, itemData) {
if (!State.variables.PawnShopItems) {
State.variables.PawnShopItems = {};
}
State.variables.PawnShopItems[itemName] = itemData;
},
// Buy an item from the shop
buyItem: function(itemName) {
var item = State.variables.PawnShopItems[itemName];
// Check if available and affordable
if (!item || item.quantity <= 0) {
return {
success: false,
message: "Item is not available."
};
}
if (State.variables.MCMoney < item.price) {
return {
success: false,
message: "You don't have enough money. Need $" + item.price + ", you have $" + State.variables.MCMoney + "."
};
}
// Process purchase
State.variables.MCMoney -= item.price;
item.quantity -= 1;
// Add to inventory
if (!State.variables.inventory) {
State.variables.inventory = {};
}
if (!State.variables.inventory[itemName]) {
State.variables.inventory[itemName] = {
image: item.image,
description: item.description,
details: item.details,
type: item.type,
quantity: 1
};
} else {
State.variables.inventory[itemName].quantity += 1;
}
// Remove if out of stock
if (item.quantity <= 0) {
delete State.variables.PawnShopItems[itemName];
}
return {
success: true,
message: "You bought " + itemName + " for $" + item.price + "."
};
},
// Generate HTML for the shop display
generateShopHTML: function() {
var html = "<div class='pawn-shop-neo'>";
// Header with money display
html += "<div class='shop-header'>";
html += "<h2 class='shop-title'>Pawn Shop</h2>";
html += "<div class='money-display-neo'>💵 Your Money: <span class='money-amount'>$" + State.variables.MCMoney + "</span></div>";
html += "</div>";
// Check if shop has items
var hasItems = false;
for (var itemName in State.variables.PawnShopItems) {
if (State.variables.PawnShopItems[itemName].quantity > 0) {
hasItems = true;
break;
}
}
if (!hasItems) {
html += "<div class='shop-empty'>No items available at this time. Check back later!</div>";
} else {
// Add items grid
html += "<div class='shop-items-neo'>";
for (var itemName in State.variables.PawnShopItems) {
var item = State.variables.PawnShopItems[itemName];
if (item.quantity > 0) {
var canAfford = State.variables.MCMoney >= item.price;
var buttonId = 'buy-' + itemName.replace(/\s+/g, '-').toLowerCase();
html += "<div class='item-card-neo " + (canAfford ? "" : "item-card-locked") + "'>";
// Item image with overlay if can't afford
html += "<div class='item-image-wrapper'>";
html += "<img src='" + item.image + "' class='item-image-neo' alt='" + itemName + "'>";
if (!canAfford) {
html += "<div class='item-locked-overlay'>🔒</div>";
}
html += "</div>";
// Item info
html += "<div class='item-info-neo'>";
html += "<h3 class='item-name-neo'>" + itemName + "</h3>";
html += "<p class='item-type-neo'>" + item.type + "</p>";
html += "<p class='item-description-neo'>" + item.description + "</p>";
html += "<p class='item-details-neo'>" + item.details + "</p>";
html += "</div>";
// Price and buy button
html += "<div class='item-footer-neo'>";
html += "<div class='item-price-neo'>$" + item.price.toLocaleString() + "</div>";
if (canAfford) {
html += "<button class='buy-button-neo' id='" + buttonId + "'>Buy Now</button>";
} else {
html += "<button class='buy-button-neo buy-button-disabled' disabled>Can't Afford</button>";
}
html += "</div>";
html += "</div>";
}
}
html += "</div>";
}
// Purchase result message
html += "<div id='purchase-result-neo'></div>";
html += "</div>";
return html;
},
// Set up click handlers for buy buttons
setupBuyButtons: function() {
var self = this;
// Remove old handlers
$(document).off('click', '[id^="buy-"]');
// Add new handlers
for (var itemName in State.variables.PawnShopItems) {
var buttonId = '#buy-' + itemName.replace(/\s+/g, '-').toLowerCase();
(function(name) {
$(document).on('click', buttonId, function(e) {
e.preventDefault();
var result = self.buyItem(name);
// Show result message
var $resultDiv = $('#purchase-result-neo');
$resultDiv.removeClass('purchase-success purchase-error');
if (result.success) {
$resultDiv.addClass('purchase-success').text('✓ ' + result.message);
// Trigger notification if available
if (typeof setup.showNotification === 'function') {
setup.showNotification('Purchased: ' + name);
}
} else {
$resultDiv.addClass('purchase-error').text('✗ ' + result.message);
}
// Refresh the shop display
setTimeout(function() {
$('#pawn-shop-container').html(self.generateShopHTML());
self.setupBuyButtons();
// Update sidebar inventory if it exists
if (typeof updateSidebar === 'function') {
updateSidebar();
}
}, 100);
});
})(itemName);
}
}
};
}
// Add Neo-Noir CSS styling for the pawn shop
$(document).one(':passagestart', function() {
$(document.head).find('#pawn-shop-css').remove();
$(document.head).append(`
<style id="pawn-shop-css">
/* Pawn Shop Container */
.pawn-shop-neo {
background: linear-gradient(135deg, rgba(15, 15, 15, 0.95) 0%, rgba(25, 25, 25, 0.95) 100%);
padding: 30px;
border: 2px solid #c9a961;
margin: 20px auto;
max-width: 1100px;
clip-path: polygon(15px 0, 100% 0, 100% calc(100% - 15px), calc(100% - 15px) 100%, 0 100%, 0 15px);
box-shadow:
0 0 40px rgba(201, 169, 97, 0.3),
0 15px 40px rgba(0, 0, 0, 0.8),
inset 0 1px 0 rgba(201, 169, 97, 0.15);
position: relative;
}
/* Film grain effect */
.pawn-shop-neo::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='2.5' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.15'/%3E%3C/svg%3E");
opacity: 0.2;
pointer-events: none;
z-index: 1;
}
/* All content above grain */
.pawn-shop-neo > * {
position: relative;
z-index: 2;
}
/* Shop Header */
.shop-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30px;
padding-bottom: 20px;
border-bottom: 2px solid rgba(201, 169, 97, 0.3);
flex-wrap: wrap;
gap: 15px;
}
.shop-title {
color: #c9a961;
font-size: 2em;
margin: 0;
text-transform: uppercase;
letter-spacing: 0.15em;
text-shadow:
0 0 20px rgba(201, 169, 97, 0.6),
2px 2px 4px rgba(0, 0, 0, 0.8);
}
/* Money Display */
.money-display-neo {
background: rgba(0, 0, 0, 0.5);
padding: 12px 20px;
border: 2px solid rgba(201, 169, 97, 0.4);
clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);
font-size: 1.1em;
color: #e8e8e8;
}
.money-amount {
color: #c9a961;
font-weight: bold;
font-size: 1.2em;
text-shadow: 0 0 8px rgba(201, 169, 97, 0.5);
}
/* Items Grid */
.shop-items-neo {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
margin-bottom: 20px;
}
/* Item Card */
.item-card-neo {
background: rgba(0, 0, 0, 0.4);
border: 2px solid rgba(201, 169, 97, 0.3);
clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
overflow: hidden;
transition: all 0.3s ease;
}
.item-card-neo:hover:not(.item-card-locked) {
border-color: #c9a961;
transform: translateY(-5px);
box-shadow:
0 0 20px rgba(201, 169, 97, 0.4),
0 8px 25px rgba(0, 0, 0, 0.6);
}
.item-card-locked {
opacity: 0.6;
}
/* Image Wrapper */
.item-image-wrapper {
position: relative;
width: 100%;
height: 200px;
overflow: hidden;
background: rgba(0, 0, 0, 0.3);
}
.item-image-neo {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s ease;
}
.item-card-neo:hover:not(.item-card-locked) .item-image-neo {
transform: scale(1.05);
}
.item-locked-overlay {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 3em;
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.8);
}
/* Item Info */
.item-info-neo {
padding: 15px;
}
.item-name-neo {
color: #c9a961;
font-size: 1.2em;
margin: 0 0 8px 0;
text-shadow: 0 0 8px rgba(201, 169, 97, 0.4);
}
.item-type-neo {
color: #888;
font-size: 0.85em;
text-transform: uppercase;
letter-spacing: 0.05em;
margin: 0 0 10px 0;
}
.item-description-neo {
color: #dcdcdc;
font-size: 0.95em;
margin: 0 0 8px 0;
line-height: 1.4;
}
.item-details-neo {
color: #aaa;
font-size: 0.85em;
font-style: italic;
margin: 0;
}
/* Item Footer */
.item-footer-neo {
padding: 15px;
border-top: 1px solid rgba(201, 169, 97, 0.2);
display: flex;
justify-content: space-between;
align-items: center;
gap: 10px;
}
.item-price-neo {
color: #c9a961;
font-size: 1.3em;
font-weight: bold;
text-shadow: 0 0 8px rgba(201, 169, 97, 0.5);
}
/* Buy Button */
.buy-button-neo {
background: rgba(15, 15, 15, 0.8);
border: 2px solid rgba(201, 169, 97, 0.6);
color: #c9a961;
padding: 10px 20px;
font-family: 'Montserrat', sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
font-size: 0.9em;
cursor: pointer;
transition: all 0.3s ease;
clip-path: polygon(6px 0, 100% 0, calc(100% - 6px) 100%, 0 100%);
}
.buy-button-neo:hover:not(.buy-button-disabled) {
background: rgba(25, 25, 25, 0.9);
border-color: #c9a961;
color: #ffffff;
transform: translateX(3px);
text-shadow: 0 0 8px rgba(201, 169, 97, 0.6);
box-shadow: 0 0 15px rgba(201, 169, 97, 0.3);
}
.buy-button-disabled {
opacity: 0.5;
cursor: not-allowed;
border-color: #666;
color: #666;
}
/* Purchase Result */
#purchase-result-neo {
margin-top: 20px;
padding: 15px;
text-align: center;
min-height: 20px;
font-size: 1.1em;
font-weight: bold;
border-radius: 5px;
transition: all 0.3s ease;
}
.purchase-success {
background: rgba(76, 175, 80, 0.2);
border: 2px solid rgba(76, 175, 80, 0.5);
color: #4CAF50;
}
.purchase-error {
background: rgba(244, 67, 54, 0.2);
border: 2px solid rgba(244, 67, 54, 0.5);
color: #f44336;
}
/* Empty Shop */
.shop-empty {
text-align: center;
padding: 60px 20px;
color: #888;
font-size: 1.2em;
font-style: italic;
}
/* Responsive */
@media (max-width: 768px) {
.pawn-shop-neo {
padding: 20px;
}
.shop-header {
flex-direction: column;
align-items: flex-start;
}
.shop-items-neo {
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 15px;
}
.item-footer-neo {
flex-direction: column;
align-items: stretch;
}
.buy-button-neo {
width: 100%;
}
}
</style>
`);
});
<</script>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/pawnshop/pawnshop.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Chicken Brother</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<<if setup.isOpeningHours($now)>>
<td>
<<button [img[img/location/chicken/chickeninside.png][InsideKFC]]>><</button>>
<div class="location-name"><b>Get inside</b></div>
</td>
<<else>>
<td class="locked">
<<button [img[img/various/locked.png][InsideKFC]]>><</button>>
<div class="location-name"><b>CLOSED</b></div>
</td>
<</if>>
<td>
<<button [img[img/location/westside/westside.jpg][West Side]]>><</button>>
<div class="location-name"><b>West Side</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>BSD - midtown</b></div>
</td>
<td>
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>Court - midtown</b></div>
</td>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Church - midtown</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/chicken/chicken.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Court</div>
<<setPassageVariableMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
@@.option-button;[[Get inside|CourtInside]]@@
<<else>>
@@.option-button-disabled;CLOSED@@
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>BSD</b></div>
</td>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Town Square</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Mall</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/chicken/chicken.jpg][ChickenBrother]]>><</button>>
<div class="location-name"><b>Chicken Brother</b></div>
</td>
<td class="locked">
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>You are here</b></div>
</td>
<td>
<<button [img[img/location/townhall/townhall.jpg][TownHall]]>><</button>>
<div class="location-name"><b>Town Hall</b></div>
</td>
<td>
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>Bank</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Church</b></div>
</td>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Park</b></div>
</td>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Hospital</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/court/court.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Massage Parlor</div>
<<setPassageVariableMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
<<if $ZenMassageTalk1 == 1 and $Charisma >= 1 and $energy >= 10>>
@@.option-button;<<link "Talk to the victim's aunt">><<goto "ZenMassage1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $ZenMassageTalk1 == 1>>
@@.option-button-disabled;Talk to the victim's aunt • 💬 Charisma 1 •⚡ Energy 10@@<</if>>
<<if $Case1Solve == 1 && $ZenMassageTalk1 == 0>>
@@.option-button;[[Tell Cassie the good news|ZenMassage3]]@@
<</if>>
<<if $FrannyCare == 1 and $CassieFrannyTalk == 1 and $Charisma >= 4 and $energy >= 10>>
@@.option-button;<<link "Visit Cassie">><<goto "CassieTalk1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $FrannyCare == 1 and $CassieFrannyTalk == 1>>
@@.option-button-disabled;Visit Cassie • 💬 Charisma 4 •⚡ Energy 10@@<</if>>
@@.option-button;[[Peek through the bedroom window|CassiePeeking]]@@
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/northside/northside.png][North Side]]>><</button>>
<div class="location-name"><b>North Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><b>Current location: North Side</b>
<img src="img/location/northside/case1crimescene.jpg" width=100%>
<<setPassageVariableNoMap>>
<<if $CrimeScene1 == 1>>
You pull up near the crime scene, the engine humming softly before you kill the ignition. Stepping out, you take in the surroundings—a forgotten stretch of land on the outskirts of a residential area. Houses sit in the distance, their windows dark, curtains drawn. Close enough that someone could have seen something. But from the way this place looks, you doubt anyone was paying attention.
The lot is overgrown with weeds and scattered debris. An abandoned property, maybe? Rusted fencing lines the back, bent in places, as if people have been sneaking through. Just beyond, the woods stretch deeper, swallowing what little light filters through the morning haze.
This is where they found Rebecca Lannigan.
A patch of flattened grass marks the spot. The forensic team took what they needed, but the outline of the body’s placement is still clear. Someone took the time to hide her. Not a quick toss-and-run—they covered her with brush, made sure she wasn’t easily spotted.
You crouch down, brushing aside some leaves. Why here?
It’s quiet but not completely isolated. Someone knew this place well enough to think it was safe. She was likely killed somewhere else and brought here. Someone had to move her body. A car, most likely.
You stand, scanning the perimeter. Houses nearby. Windows face this lot. Somebody might have seen something—or maybe they heard something and chose to ignore it.
You take a slow breath, hands on your hips. Where do you start?
@@.option-button;[[Check the cameras around the crime scene|CheckCameraCase1]]@@
<<else>>
Nothing to do here for now.
@@.option-button;[[Leave|North Side]]@@
<</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/northside/case1crimescene.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Stone Disk</h2><img src="img/item/artifact1.jpg" width =100%>
<p><strong>Type:</strong> Artifact</p><p><strong>Full Description:</strong> ???</p>
<div class="location-banner"> Town Hall</div>
<<setPassageVariableMap>>
<<if setup.isOpeningHours($now)>>@@.option-button;[[Get inside|TownHallInside]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>BSD</b></div>
</td>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Town Square</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Mall</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>Court</b></div>
</td>
<td class="locked">
<<button [img[img/location/townhall/townhall.jpg][TownHall]]>><</button>>
<div class="location-name"><b>You are here</b></div>
</td>
<td>
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>Bank</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
<tr>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Church</b></div>
</td>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Park</b></div>
</td>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Hospital</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][A]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townhall/townhall.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<h2>GLOCK 22</h2><img src="img/item/policegun.png" width =100%>
<p><strong>Type:</strong> Gun</p><p><strong>Full Description:</strong> Standard police handgun.</p>
<div class="location-banner">???</div>
<img src="img/location/northside/case1crimescene.jpg" width=100%>
<<setPassageVariableNoMap>>
<<if $Artifact1 == 1>>
You step past the taped-off perimeter, moving beyond Rebecca's crime scene into the overgrown brush. The river isn’t far—maybe a five-minute walk through the trees.
Something catches your eye.
A curved edge, barely visible beneath the dirt and tangled roots. At first, you think it’s just another rusted scrap of metal, but as you kneel and brush away the loose soil, the shape becomes clearer.
A circular artifact, roughly the size of a keychain, made of stone worn with age. Strange engravings coil along its surface—intricate symbols you don’t recognize. Might be valuable.
@@.option-button;[[Leave|Artifact1Found]]@@
<<else>>
Nothing here.
@@.option-button;[[Leave|North Side]]@@
<</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/northside/case1crimescene.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Sandwich</h2><img src="img/item/sandwich.jpg" width =100%>
<p><strong>Type:</strong> Consumable</p><p><strong>Full Description:</strong> A sandwich.</p><<nobr>><<if not $inventory["Sandwich"] or not $inventory["Sandwich"].quantity>>
<p style="color: red; font-weight: bold;">No Sandwich left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Sandwich"].quantity>></p>
@@.option-button;<<link "Eat">><<useItem "Sandwich">><<goto $prevPassage>><<set $lastate to setup.changeDate($now, 'hours', 6)>><<run $('.popup-overlay').remove()>><</link>>@@<</if>><</nobr>>
<b>Current location: BSD</b>
<img src="img/location/bsd/bsd.jpg" width=100%>
<<setPassageVariableNoMap>>
[[Leave|Hospital]]
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsd.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Doctor Office</div>
<<setPassageVariableNoMap>>
<<if setup.isOpeningHours($now)>>@@.option-button;[[Doctor Evelyn]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hospital/hospitalinside.png][HospitalInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Patient Room</div>
<<nobr>><<set $prevPassage = passage()>>
<<if $hunger >= 259200000>>
<<goto "Patient Room">>
<</if>>
<<if $energy <= 0>>
<<goto "Pass Out">>
<</if>>
<<set $now to setup.changeDate($now, 'days', 2)>>
<<set $energy to Math.max(100, 0)>>
<<set $lastate to $now>><</nobr>><<if $MCStarve == 1 || $MCDeath == 1>>
A dull, sterile beeping pulls you from the darkness. Your body feels heavy, like you’ve been buried under concrete. The scent of antiseptic fills your nose—sharp, clinical.
Your eyes crack open, and for a moment, everything is a blur. Fluorescent lights buzz overhead, too bright against the white ceiling. The soft hum of machines surrounds you, the steady beep of a heart monitor matching the sluggish rhythm in your chest.
You’re in a hospital. On your blacket is a hospital bill. There go $500.
<<set $HospitalBill = 1>><<set $HospitalVisit += 1>>
<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hospital/hospitalinside.png][HospitalInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/patientroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><b>Current location: BSD</b>
<img src="img/location/bsd/bsd.jpg" width=100%>
<<setPassageVariableNoMap>>
[[Leave|Hospital]]
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsd.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Wine Storage</div>
<<setPassageVariableMap>><<nobr>><<if $DavidJoinIn1 == 1 && $GregJoinIn1 == 1>>@@.option-button;[[Meet up with the boys|PlantoHijack1]]@@<</if>>
<<if $FrannyCare == 1>>@@.option-button;[[Franny|FrannyAtWineStorage]]@@<</if>>
<<if $MarinaCare == 1>>@@.option-button;[[Marina|MarinaAtWineStorage]]@@<</if>>
@@.option-button;[[Sleep for 7 hours|Sleep]]@@<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<<if $energy >= 2>>
<td>
<<button [img[img/location/bar/barinside.jpg][SaltBarInside]]>><</button>>
<div class="location-name"><b>The Bar</b></div>
</td>
<<else>>
<td class="locked">
<<button [img[img/various/locked.png][SaltBarInside]]>><</button>>
<div class="location-name"><b>You are too tired to go anywhere</b></div>
</td>
<</if>>
</tr>
</table><</nobr>>
<<if $energy < 2>><<run hideSidebar()>><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Confessional</div>
<<setPassageVariableNoMap>>
<<nobr>><<set _before to setup.changeDate($MaryConfessionTime, 'hours', -2)>><<set _after to setup.changeDate($MaryConfessionTime, 'hours', 2)>>
<<if $now.getTime() >= _before.getTime() and $now.getTime() <= _after.getTime() and $MaryConfession1 == 1>>
@@.option-button;[[Wait|MaryConfession1]]@@
<<elseif $now >= $MaryConfessionTime && $MaryConfession1 == 1 && $GameMode == 0>>
@@.option-button;[[Wait|MaryConfession1]]@@
<</if>>
<<set _before to setup.changeDate($MaryConfessionTime2, 'hours', -2)>><<set _after to setup.changeDate($MaryConfessionTime2, 'hours', 2)>>
<<if $now.getTime() >= _before.getTime() and $now.getTime() <= _after.getTime() and $MaryConfession2 == 1>>
@@.option-button;[[Wait|MaryConfession7]]@@
<<elseif $now >= $MaryConfessionTime2 && $MaryConfession2 == 1 && $GameMode <= 2>>
@@.option-button;[[Wait|MaryConfession7]]@@
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/church/churchhall.png][ChurchInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Graveyard</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/church/churchhall.png][ChurchInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/graveyard.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Flower Vendor</div>
<<setPassageVariableNoMap>>
@@.option-button-disabled;Coming Soon@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townsquare/townsquare.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Fountain</div>
<<setPassageVariableNoMap>>
@@.option-button;<<link "Throw money">><<set $MCMoney -= 1 >><<goto "Fountain">>><</link>>@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/townsquare/townsquare.jpg][TownSquare]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townsquare/fountain.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Park</div><<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
<<set $ParkJoggingEventChance = Math.floor(Math.random() * 100)>>
<<if $ParkJoggingEventChance < 25>>
<img src="img/various/girlinpark1.webp" width=50% style="display: block; margin: 0 auto;">
<<elseif $ParkJoggingEventChance >= 25 && $ParkJoggingEventChance < 50>>
<img src="img/various/girlinpark2.webp" width=50% style="display: block; margin: 0 auto;">
<<elseif $ParkJoggingEventChance >= 50 && $ParkJoggingEventChance < 75>>
<img src="img/various/girlinpark3.webp" width=100%>
<<else>>
<</if>><<elseif setup.isNight($now) || setup.isEvening($now)>>
The park at night feels wrong the moment you step inside it. The lampposts have been broken for years, leaving only moonlight to light the area. Somewhere in the distance, an animal cries out. This isn’t a good place to be at night.
<</if>>
<<if $energy >= 10>>
@@.option-button;<<link "Walk">><<set $Endurance += 1>><<set $energy to Math.max($energy - 10, 0)>><<set $maxEnergy += 1>><<run setup.showNotification("Your Endurance has increased by 1")>><<run setup.showNotification("Your max energy has increased by 1")>><<goto "Go for a walk">><</link>>@@
<<else>>
@@.option-button-disabled;Insufficient energy@@<</if>>
@@.option-button;[[Venture deeper|ParkDept1]]@@<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<set $now to setup.changeDate($now, 'minutes', 115)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/park/park.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Happy Meal</h2><img src="img/item/happymeal.png" width =100%>
<p><strong>Type:</strong> Consumable</p><p><strong>Full Description:</strong>Burger, meat sandwich, beans, fries, and Red tea.</p><<nobr>><<if not $inventory["Happy Meal"] or not $inventory["Happy Meal"].quantity>>
<p style="color: red; font-weight: bold;">No Happy Meal left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Happy Meal"].quantity>></p>
@@.option-button;<<link "Eat">><<useItem "Happy Meal">><<goto $prevPassage>><<set $lastate to setup.changeDate($now, 'hours', 6)>><<run $('.popup-overlay').remove()>><</link>>@@<</if>><</nobr>>
<h2>Chicken Sandwich</h2><img src="img/item/chickensandwich.jpg" width =70%>
<p><strong>Type:</strong> Consumable</p><p><strong>Full Description:</strong> Fried Chicken Sandwich.</p><<nobr>><<if not $inventory["Chicken Sandwich"] or not $inventory["Chicken Sandwich"].quantity>>
<p style="color: red; font-weight: bold;">No Chicken Sandwich left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Chicken Sandwich"].quantity>></p>
@@.option-button;<<link "Eat">><<useItem "Chicken Sandwich">><<goto $prevPassage>><<set $lastate to setup.changeDate($now, 'hours', 6)>><<run $('.popup-overlay').remove()>><</link>>@@<</if>><</nobr>>
<h2>Fried Chicken</h2><img src="img/item/friedchicken.jpg" width =70%>
<p><strong>Type:</strong> Consumable</p><p><strong>Full Description:</strong> Chicken Brother's infamous Fried Chicken.</p><<nobr>><<if not $inventory["Fried Chicken"] or not $inventory["Fried Chicken"].quantity>>
<p style="color: red; font-weight: bold;">No Fried Chicken left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Fried Chicken"].quantity>></p>
@@.option-button;<<link "Eat">><<useItem "Fried Chicken">><<goto $prevPassage>><<set $lastate to setup.changeDate($now, 'hours', 6)>><<run $('.popup-overlay').remove()>><</link>>@@<</if>><</nobr>>
<div class="location-banner">West Side</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/chicken/chicken.jpg][ChickenBrother]]>><</button>>
<div class="location-name"><b>Chicken Brother - Come back to midtown</b></div>
</td>
<td>
<<button [img[img/location/bar/saltbar.jpg][SaltBar]]>><</button>>
<div class="location-name"><b>Salt Bar</b></div>
</td>
<td>
<<button [img[img/location/nightclub/nightclub0.png][Nightclub]]>><</button>>
<div class="location-name"><b>Nightclub</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/hotel/hotel.png][Hotel]]>><</button>>
<div class="location-name"><b>Hotel</b></div>
</td>
<td>
<<button [img[img/location/riverbank/riverbank1.png][Riverbank]]>><</button>>
<div class="location-name"><b>Riverbank</b></div>
</td>
<td>
<<button [img[img/location/casino/casinoinprogress.png][CasinoInProgress]]>><</button>>
<div class="location-name"><b>Construction Site</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/westside/westside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Sex Shop</div>
<<setPassageVariableMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<<if setup.isOpeningHours($now)>>
<td>
<<button [img[img/location/sexshop/sexshop3.png][SexShopInside]]>><</button>>
<div class="location-name"><b>Get inside</b></div>
</td>
<<else>>
<td class="locked">
<<button [img[img/various/locked.png][SexShopInside]]>><</button>>
<div class="location-name"><b>Locked</b></div>
</td>
<</if>>
<td>
<<button [img[img/location/northside/northside.png][North Side]]>><</button>>
<div class="location-name"><b>North Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/sexshop.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">South Side</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/university.png][University]]>><</button>>
<div class="location-name"><b>University - Come back to midtown</b></div>
</td>
<td>
<<button [img[img/location/hairsalon/hairsalon.jpg][Hair Salon]]>><</button>>
<div class="location-name"><b>Hair Salon</b></div>
</td>
<td>
<<button [img[img/location/library/library.jpg][Library]]>><</button>>
<div class="location-name"><b>Library</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/abandonedmine/abandonedmine.png][Abandoned Mine]]>><</button>>
<div class="location-name"><b>Abandoned Mine</b></div>
</td>
<td>
<<button [img[img/location/route13/route13.png][Route 13]]>><</button>>
<div class="location-name"><b>Route 13</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/southside/southside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">East Side</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/eastsideresident/eastsideresident.jpg][East Residential Area]]>><</button>>
<div class="location-name"><b>East Residential Area</b></div>
</td>
<td>
<<button [img[img/location/warehouse/warehouse.png][Warehouse]]>><</button>>
<div class="location-name"><b>Warehouse - Come back to midtown</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/eastside/eastside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">East Residential Area</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/carriehouse/carriehouse.png][CarrieHouse]]>><</button>>
<div class="location-name"><b>Carrie House</b></div>
</td>
<td>
<<button [img[img/location/jocelynhouse/jocelynhouse.png][JocelynHouse]]>><</button>>
<div class="location-name"><b>Jocelyn House</b></div>
</td>
<td>
<<button [img[img/location/eastside/eastside.png][East Side]]>><</button>>
<div class="location-name"><b>East Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/eastsideresident/eastsideresident.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Warehouse</div>
<<setPassageVariableMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
<<if $RissaWarehouse == 1>>@@.option-button;[[Rissa|Warehouse Worker]]@@
<</if>>
<</if>>
@@.option-button;[[Check the air vent|AirVent]]@@
<div class="styled-line"></div><</nobr>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Hospital - midtown</b></div>
</td>
<td>
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>Bank - midtown</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Mall - midtown</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/eastside/eastside.png][East Side]]>><</button>>
<div class="location-name"><b>East Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">North Side</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/pawnshop/pawnshop.png][PawnShop]]>><</button>>
<div class="location-name"><b>Pawn Shop - Come back to midtown</b></div>
</td>
<td>
<<button [img[img/location/massageparlor/zenmassage.png][Massage Parlor]]>><</button>>
<div class="location-name"><b>Massage Parlor</b></div>
</td>
<td>
<<button [img[img/location/sexshop/sexshop.png][Sex Shop]]>><</button>>
<div class="location-name"><b>Sex Shop</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/gunstore/gunstorefront.jpg][Gun Store]]>><</button>>
<div class="location-name"><b>Gun Store</b></div>
</td>
<td>
<<button [img[img/location/northresidentarea/northresidentarea.jpg][North Residential Area]]>><</button>>
<div class="location-name"><b>North Residential Area</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/northside/northside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">North Residential Area</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/northside/northside.png][North Side]]>><</button>>
<div class="location-name"><b>North Side</b></div>
</td>
<td>
<<button [img[img/location/davidhouse/davidhouse.png][DavidHouse]]>><</button>>
<div class="location-name"><b>David's house</b></div>
</td>
<td>
<<button [img[img/location/dannihouse/dannihouse.png][DanniHouse]]>><</button>>
<div class="location-name"><b>Danni's House</b></div>
</td>
</tr>
<tr>
<<if $Case1Solve == 0>>
<td>
<<button [img[img/various/rebeccahouse.png][Case1VictimHouse]]>><</button>>
<div class="location-name"><b>Rebecca's house</b></div>
</td>
<</if>>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/northresidentarea/northresidentarea.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if $CaughtSuspectCase1 == 2>>
He’s fast. But you’re faster.
Pushing through the burn in your legs, you close the gap. The suspect reaches the alley behind the house, trying to scale another fence—just as you tackle him to the ground.
The two of you hit the pavement hard. He struggles, throwing wild punches, one of them connecting with your ribs. He’s tough. Strong. But you’ve fought tougher.
You drive an elbow into his side, forcing a grunt out of him. He tries to push away, but you twist his arm behind his back, forcing him down.
<<dialogue $playerAvatar "You" "Stay down!">>
Panting, you yank his other arm back and snap the cuffs around his wrists.
<<set $Case1Suspect = 1>><<set $InterrogateSuspectCase1 = 1>><<set $CaughtSuspectCase1 = 0>>
<<dialogue $playerAvatar "You" "Game’s over, fucker">>
@@.option-button;[[Return to the station|BSD]]@@
<<run updateGuideTextForStoryline("Chapter I Guide", "Talk to the suspect in the cell")>>
<<elseif $CaughtSuspectCase1 == 1>>
Heart still hammering, you turn back, making your way to Rebecca’s house. If that guy was here, he was looking for something. And if he left in a hurry, maybe he left something behind.
You step back into Rebecca’s room. The place is a mess—drawers pulled open, papers scattered, her closet half-emptied. The intruder was searching for something specific. But what?
Then, something catches your eye.
A faint trail of smoke.
You move toward Rebecca’s desk and see it—a cigar, still smoldering in an ashtray.
Not just any cigar. An expensive one. The kind a low-level thug wouldn’t be smoking. Someone with money. Someone who doesn’t mind leaving a trace.
You pull out a glove, carefully picking up the cigar. Whoever was here wasn’t just looking for something—they were comfortable enough to light up while doing it.
You exhale slowly, watching the thin wisp of smoke rise.
@@.option-button;[[Return to the station|BSD]]@@
<<addItem "Cigar" "img/various/case1cigar.png" "A high end cigar dropped by the suspect." "A cigar." "Evidence" 500 1>>
<<set $MorgueConversation2 = 1>><<set $CaughtSuspectCase1 = 0>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to the morgue")>>
<<elseif $Case1ExamineHouse == 1>>
You pull up outside Rebecca Lannigan’s house. A modest, two-story home, old but well-kept. The kind of place that’s been in the family for generations. Her aunt, Cassie Lannigan, still lives here. She was the one who reported Rebecca missing.
The porch creaks under your weight as you step up, but you don’t knock. Not yet. You want to take a look around first.
You push open the unlocked front door and step inside. The living room is neat, everything in its place—framed photos, an old couch, a small TV. The kind of home where things don’t change much.
You move through the first floor, checking the kitchen, the dining room. Nothing seems off—until you hear it.
A creaking noise from upstairs.
You freeze. Soft movement. A shuffle. Someone’s here.
Slowly, you draw your gun, stepping lightly as you make your way to the stairs. You take one step at a time, careful not to make a sound. The noise comes from the end of the hall—Rebecca’s room.
You inch closer, grip tightening around your gun. Then—
The door creaks.
A figure in a hoodie and a black mask turns toward you. Dark eyes lock onto yours.
<<dialogue $playerAvatar "You" "FREEZE">>
Without hesitation, the masked man dives for the window. Glass shatters as he crashes through, landing hard in the yard below.
You burst into the room, gun raised, just in time to see him stumble to his feet and take off running.
No hesitation. You chase.
<<nobr>>
<<set $copSpeed = 5>> /* Speed of the cop */
<<set $suspectSpeed = 4>> /* Speed of the suspect */
<<set $distance = 22>> /* Distance between them */
<<set $stamina = 10>> /* Player's stamina */
<<set $Case1ChaseTurn = 0>>
<</nobr>>
@@.option-button;[[Chase|Case1ChaseStart]]@@
<<else>>
There nothing here.
@@.option-button;[[Leave|North Residential Area]]@@
<</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/rebeccahouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/others/oldman1.png" width=50% style="display: block; margin: 0 auto;">
You move to the nearest house, a small, weathered two-story with peeling paint and a rusted mailbox. You knock firmly on the door. After a moment, an older man peeks through the window before cracking the door open. His voice is hoarse and wary.
<<dialogue "img/character/others/oldman1avatar.png" "Oldman" "Yeah?">>
You flash your badge.
<<dialogue $playerAvatar "You" "Sheriff. I’m looking into the murder that happened just down the road. Did you see or hear anything the night of December 27th?">>
<<dialogue "img/character/others/oldman1avatar.png" "Oldman" "Nope. Didn’t even know about it 'til I saw the news. I don’t go out much at night">>
You study his face. He seems truthful, just disinterested. After a few more questions, you thank him and move on.
@@.option-button;[[Knock on doors|Case 1 Knock on doors 2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/oldman1house.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/danni/singlemom1.png" width=50% style="display: block; margin: 0 auto;">
The second house is in much better shape. A beautiful woman in her thirties answers, arms crossed; beside her is a teenage brat, her expression guarded.
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "I already told the other cops—I didn’t see anything">>
<<dialogue $playerAvatar "You" "You were home that night?">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Yeah, but I keep my curtains shut. I don’t look outside, and I sure as hell don’t open my door after dark; my baby needs to go to sleep early">>
<<dialogue "img/various/unknown.png" "???" "Mommy, I want to play Minecraft">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Sure, honey. Just give Momma a second. Is there anything else?">>
Another dead end.
@@.option-button;[[Knock on doors|Case1 Knock on doors 3]]@@
<<set $rudeBitch1 = 1>><<set $unlockedCharacters.danni = true>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannihouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run setup.showNotification("💋New Character Unlocked: Danni!")>>
<<run updateGuideTextForStoryline("Danni", "Visit Danni's place at night. Need lock pick")>>
<img src="img/character/others/youngman1.png" width=50% style="display: block; margin: 0 auto;">
The third house belongs to a younger guy, maybe in his early twenties, wearing a stained tank top and looking half-asleep when he opens the door. He rubs his eyes, squinting at you.
<<dialogue "img/character/others/youngman1avatar.png" "Young man" "Yeah? A murder? Shit, man. I, uh… I dunno. Didn’t hear anything weird">>
<<dialogue $playerAvatar "You" "You live alone?">>
<<dialogue "img/character/others/youngman1avatar.png" "Young man" "Nah, my brother was over that night. But we were drinking, watching a movie. If something happened outside, we wouldn’t have noticed">>
@@.option-button;[[Leave|Case1CrimeScene]]@@
<<set $CrimeScene1 = 0>><<run hideSidebar()>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/youngman1house.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<set $Case1ChaseTurn += 1>>
<<nobr>><<if $Case1ChaseTurn <= 13>>
The suspect bolts down the alley! You chase after them.<br>
Distance: <<print $distance>> meters <br>
Stamina: <<print $stamina>> <br>
<<if $distance <= 0>>
<<set $CaughtSuspectCase1 = 2>><<goto "Case1CaughtSuspect">>
<<else>>
@@.option-button;<<link "Sprint">>
<<set $copSpeed = 6>>
<<set $stamina -= 2>>
<<set $distance -= ($copSpeed - $suspectSpeed)>>
<<if $stamina <= 0>>
<<goto "Case1OutOfStamina">>
<<else>>
<<goto "Case1ChaseStart">>
<</if>>
<</link>>@@
@@.option-button;<<link "Keep Pace">>
<<set $copSpeed = 5>>
<<set $stamina += 1>>
<<set $distance -= ($copSpeed - $suspectSpeed)>>
<<goto "Case1ChaseStart">>
<</link>>@@
@@.option-button;<<link "Try to Tackle">>
<<if $distance <= 4>>
<<goto "Case1TackleSuccess">>
<<else>>
You’re too far away! The suspect gains ground.
<<set $distance += 2>>
<<goto "Case1ChaseStart">>
<</if>>
<</link>>@@
<</if>>
<<else>>
You let the son of a bitch get away.
<<set $CaughtSuspectCase1 = 1>><<set $Case1ExamineHouse = 0>>
@@.option-button;[[Go back|Case1VictimHouse]]@@
<</if>><</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/thestreet.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You lunge forward and grab the suspect! They struggle, but you pin them down.
The chase is over.
@@.option-button;[[Continue|Case1VictimHouse]]@@
<<run hideSidebar()>>
<<set $CaughtSuspectCase1 = 2>>
<<set $Case1ExamineHouse = 0>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/thestreet.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Your legs burn, your lungs feel like they’re on fire.
You slow down, and the suspect vanishes into the streets.
@@.option-button;[[Damn it...|Case1VictimHouse]]@@
<<set $CaughtSuspectCase1 = 1>><<set $Case1ExamineHouse = 0>><<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/thestreet.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You dive forward and tackle the suspect!
They crash to the ground, struggling under your grip.
@@.option-button;[[Handcuff them|Case1VictimHouse]]@@
<<set $CaughtSuspectCase1 = 2>><<set $Case1ExamineHouse = 0>><<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/thestreet.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Cell</div>
<<setPassageVariableNoMap>>
<<nobr>>@@.option-button;[[Cell 1]]@@
@@.option-button;[[Cell 2]]@@
@@.option-button;[[Cell 3]]@@<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/sheriffoffice.png][SheriffOffice]]>><</button>>
<div class="location-name"><b>Sheriff Office</b></div>
</td>
<td>
<<button [img[img/location/bsd/squadroom.jpg][SquadRoom]]>><</button>>
<div class="location-name"><b>Squad Room</b></div>
</td>
<td>
<<button [img[img/location/bsd/emptyarmory.png][Armory]]>><</button>>
<div class="location-name"><b>Armory</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/bsd/morgue.jpg][Morgue]]>><</button>>
<div class="location-name"><b>Morgue</b></div>
</td>
<td>
<<button [img[img/location/bsd/firingrange.png][FiringRange]]>><</button>>
<div class="location-name"><b>Firing Range</b></div>
</td>
<td>
<<button [img[img/location/bsd/bsdreception.png][BSDInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/cell.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Cell</div>
<<setPassageVariableNoMap>>
<<if $Case1Suspect == 1 and !$Case1SuspectRelease>>@@.option-button;[[Rebecca murder's primary suspect]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/cell.jpg][Cell]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/cell.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Cell</div>
<<setPassageVariableNoMap>>
<<if $now < $JackMcMahonReleaseTime>>@@.option-button;[[Jack McMahon|McMahonInjail]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/cell.jpg][Cell]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/cell.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Cell</div>
<<setPassageVariableNoMap>>
<<if $Case1MurderCaught >= 1>>@@.option-button;[[Philip Fabrizio]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/cell.jpg][Cell]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/cell.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Picking up smoking, Sheriff?">>
<<dialogue $playerAvatar "You" "Ran into an intruder at Rebecca Lannigan’s house, He got away, but he left me a parting gift">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Not exactly the brand you pick up at the gas station">>
Monroe picks up the cigar with tweezers, turning it over under the bright lab light.
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Yeah. I want a DNA test">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Come back in two days">>
@@.option-button;[[Leave|Morgue]]@@
<<set $CigarExamine to setup.changeDate($now, 'days', 2)>>
<<set $MorgueConversation2 = 0>>
<<set $MorgueConversation3 = 1>>
<<useItem "Cigar">>
<<run hideSidebar()>>
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/morgue.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Wait two days then visit the morgue. Time: "+ formatGameDateTime($CigarExamine))>>
You go into the morgue; the air is cold and sterile, the fluorescent lights buzzing faintly overhead. The scent of disinfectant barely masks the underlying metallic tang of death.
<<run hideSidebar()>>
Dr. Nathan Monroe stands over a steel table, gloved hands resting on the edge. He’s in his fifties, balding, with sharp eyes that have seen too much.
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Sheriff. You’re here for Rebecca Lannigan?">>
<<dialogue $playerAvatar "You" "Yeah, What can you tell me?">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Young, healthy, no drugs in her system. Cause of death was a single, heavy blow to the back of the skull. Whatever hit her—pipe, crowbar, something solid—it killed her instantly. Just one strike">>
He gestures toward Rebecca’s body, now covered by a sheet.
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "She’s got defensive wounds. Bruising on the arms, signs of a struggle. She fought back">>
<<dialogue $playerAvatar "You" "Anything else?">>
<img src="img/various/rebeccalanniganautopsy.webp" width=100%>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "No gunshot wounds. Whoever did this wasn’t interested in robbery; as in her paper, her purse was found with all of her money in it, but there are signs of sexual assault—we found semen in her vagina, oh, and the phone was taken">>
<<dialogue $playerAvatar "You" "Time of death?">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Sometime between midnight and 2 AM on the 28th. Three days before she was found">>
That lines up with what you already know—she left work at 11 PM on the 27th. But instead of heading home, she went somewhere else.
<<dialogue $playerAvatar "You" "Anything at the crime scene?">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Not much. No blood trail, meaning she was killed elsewhere and dumped there. Someone took the time to hide her. That’s effort. That’s planning">>
You look down at the covered body. A girl with her whole life ahead of her, snuffed out by someone who thought they could get away with it.
<<dialogue $playerAvatar "You" "This wasn’t random">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "No, Sheriff. It wasn’t">>
@@.option-button;[[Leave|BSD]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $MorgueConversation1 = 0>><<set $Case1ExamineHouse = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/morgue.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Check Rebecca's house in North Side")>><div class="location-banner">Warehouse</div>
<<setPassageVariableNoMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/warehouse/warehouse.png][Warehouse]]>><</button>>
<div class="location-name"><b>Warehouse</b></div>
</td>
<td>
<<button [img[img/location/warehouse/airventnothing.jpg][Sneak through the air vent]]>><</button>>
<div class="location-name"><b>Sneak through the air vent</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/vent.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You wait in the shadows as the car pulls out of the lot. Then, you follow.
Keeping a safe distance, you tail the sedan through the streets of Bason. It weaves through town, passing closed storefronts and late-night bars, before finally pulling into a private estate on the outskirts.
This is Roberto Fabrizio's house. A captain under Don Fadda.
Fabrizio’s guards open the gate without question, and the car rolls into the long driveway. You pull over a block away, killing your headlights.
This isn’t just some thug. This is a made man—deep in the Fadda crime family. And if he’s involved in the same cigar shipment that led you to Rebecca Lannigan’s case...
Then you just found your biggest lead yet.
@@.option-button;[[Leave|North Side]]@@
<<run hideSidebar()>>
<<set $Case1CigarEvidence1 = 0>><<set $Case1PhilipSuspect = 1>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/fabriziohouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "From BSD go to Rebecca's workplace")>>
The diner is quiet, with only a few customers scattered in booths. The scent of burnt coffee lingers in the air, mixing with the grease from the kitchen. You step inside, your presence drawing a few glances, but most of the regulars keep their heads down. You walk up to the counter, where a middle-aged waitress wipes down a coffee pot with a worn cloth. Her nametag said Jan. She eyes you before setting the pot down.
<<dialogue "img/character/others/rebeccacoworker.png" "Jan" "You’re the new sheriff">>
<<dialogue $playerAvatar "You" "Looking into Rebecca Lannigan’s murder">>
<<dialogue "img/character/others/rebeccacoworker.png" "Jan" "Damn shame. She was a good kid">>
<<dialogue $playerAvatar "You" "You worked with her?">>
<<dialogue "img/character/others/rebeccacoworker.png" "Jan" "Yeah, for the past two years. She did the closing shift mostly. Hard worker. Always on time. But you ain’t here to hear about her work ethic, are you?">>
<<dialogue $playerAvatar "You" "I need to know if anyone was bothering her. Someone who stood out">>
<<dialogue "img/character/others/rebeccacoworker.png" "Jan" "Yeah… there was this one guy. Came in a lot. Always in a suit, real slick, like he thought he owned the place. Left big tips, but Rebecca wasn’t interested">>
<<dialogue $playerAvatar "You" "You got a name?">>
<<dialogue "img/character/others/rebeccacoworker.png" "Jan" "No. But he drove a black Bentley. One of those expensive foreign ones. Always parked out front like he wanted everyone to see it">>
<<dialogue $playerAvatar "You" "How did he look like?">>
<<dialogue "img/character/others/rebeccacoworker.png" "Jan" "I'm not sure, but he's young, 20-something, I guess">>
<<dialogue $playerAvatar "You" "Did Rebecca ever mention anything about him?">>
<<dialogue "img/character/others/rebeccacoworker.png" "Jan" "Just that he wouldn’t take no for an answer. Kept asking her out, trying to impress her. Said he gave her a weird feeling">>
<<dialogue $playerAvatar "You" "How did she react the last time he came in?">>
<<dialogue "img/character/others/rebeccacoworker.png" "Jan" "A week before she disappeared, she was different. Jumpier. Kept checking her phone like she was expecting something">>
<<dialogue $playerAvatar "You" "Did she ever leave with him?">>
<<dialogue "img/character/others/rebeccacoworker.png" "Jan" "Not that I saw">>
You nod, thanking her before stepping out into the cool air. You notice that this place is very close to the nightclub, and who wastes money on strippers more than a bunch of spoiled rich kids?
@@.option-button;[[Leave|West Side]]@@
<<run hideSidebar()>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $Case1PhilipSuspect = 0>><<set $Case1NightClubCCTV = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/rebeccaworkplace.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to the nightclub. Open at evening and night")>>
The manager, a burly man in his fifties with slicked-back hair and a permanent scowl, leans on the counter, eyeing you warily. He knows who you are before you even flash your badge.
<<dialogue $playerAvatar "You" "I need access to your security footage">>
<<dialogue "img/character/others/bouncer1.png" "Manager" "Not possible">>
<<dialogue $playerAvatar "You" "A young woman was murdered. She was seen with someone who might have come through here. This isn’t a request">>
<<dialogue "img/character/others/bouncer1.png" "Manager" "This club is private property, Sheriff. I don’t hand over footage without a warrant">>
<<dialogue $playerAvatar "You" "You’re really gonna make me go through the courts for this?">>
<<dialogue "img/character/others/bouncer1.png" "Manager" "Rules are rules. Come back with a warrant">>
You hold his gaze, but he doesn’t flinch. You could push harder, but it won’t get you anywhere tonight.
@@.option-button;[[Leave|Case1CCTV2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/nightclub.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You spot Philip Fabrizio slumped in the VIP section, whiskey glass in hand, a stripper draped over his shoulder. He’s completely wasted, his movements sluggish, his smirk lazy. If he’s your killer, this is your best shot at shaking something out of him. You hide the recorder in your pocket and let the masquerade begin.
You adjust your posture, slipping into the role you need to play. Confidence. No aggression. You’re not here as the sheriff. You’re here as someone who understands.
You walk up to his table, sliding into the seat across from him. The stripper gives you a wary glance, sensing something off. You flash her an easy smile.
<<dialogue $playerAvatar "You" "Why don’t you grab us another round, honey?">>
She hesitates, then looks at Philip, who waves her off with an annoyed grunt. She takes the hint and disappears into the crowd.
<img src="img/character/philip/philip.png" width=70% style="display: block; margin: 0 auto;">
<<dialogue "img/character/philip/philipavatar.png" "Philip" "What the hell do you want?">>
<<dialogue $playerAvatar "You" "Relax, I’m not here to start shit. Just wanted to talk. Man to man">>
<<dialogue "img/character/philip/philipavatar.png" "Philip" "Yeah? ‘Bout what?">>
<<dialogue $playerAvatar "You" "My name is Patrick Bateman; there's a girl, and I want to fuck her brain out. I have tried everything, but she won't budge">>
<<dialogue "img/character/philip/philipavatar.png" "Philip" "Amateur">>
<<dialogue $playerAvatar "You" "Yeah… yeah, that’s what I figured. I see that you are a real player. Can you get her for me?">>
<<dialogue "img/character/philip/philipavatar.png" "Philip" "Normally, I would tell you to fuck off, but today I'm having a blast">>
<<dialogue $playerAvatar "You" "Thank you, man">>
<<dialogue "img/character/philip/philipavatar.png" "Philip" "So who's the girl?">>
<<dialogue $playerAvatar "You" "A waiter at that dinner across the street. She's a real beauty">>
<<dialogue "img/character/philip/philipavatar.png" "Philip" "Liar, the only beauty there is dead">>
<<dialogue $playerAvatar "You" "What do you mean?">>
Philip chuckles, like he’s indulging some inside joke. He taps the rim of his glass.
<<dialogue "img/character/philip/philipavatar.png" "Philip" "I'm going to tell you the hard truth: if it takes that long and there are no results, you might as well rape her">>
<<dialogue $playerAvatar "You" "Speaking from experience?">>
<<dialogue "img/character/philip/philipavatar.png" "Philip" "Yes, I totally nailed that juicy cunt">>
<<dialogue $playerAvatar "You" "But how do you get away with it?">>
<<dialogue "img/character/philip/philipavatar.png" "Philip" "The bitch tries to run away, but I throw a wine bottle at her. That must be a one-in-a-million shot, because she' fucking dies right away. My old man handles everything. Tell you what, chase your love, and I'll handle it for you">>
Knowing that you have enough evidence. You knock Philip out cold.
@@.option-button;[[Leave|Nightclub]]@@
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $Case1NightClubCCTV = 0>><<set $Case1Meeting = 1>><<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/nightclub.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to the squadroom. Gather the team to discuss the case")>>
<<dialogue $playerAvatar "You" "Hey guys, come to the meeting room; I got progress on the waiter's case">>
David leans back in his chair, arms crossed. Selena is seated at the table, scrolling through her tablet, the faint glow reflecting off her sharp, observant eyes. Riley, the intern cop, sits near the end, knee bouncing, too wired to hide her nerves. You shut the door behind you. Riley can't hide her excitement.
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "What did you find, sheriff?">>
<<dialogue $playerAvatar "You" "The perpetrator for the Rebecca's case">>
<<dialogue "img/character/david/david.png" "David" "Who is our guy?">>
<<dialogue $playerAvatar "You" "Philip Fabrizio, I got his confession at the nightclub. Here's the record">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "How did you get him to confess?">>
<<dialogue $playerAvatar "You" "He was drunk, and I got to improvise a bit">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Philip Fabrizio, Roberto Fabrizio's son?">>
<<dialogue $playerAvatar "You" "Yes, Philip Fabrizio, the son of Roberto Fabrizio, a captain under Don Fadda, last time I checked, I got him to tell me exactly what he did to the girl, and his father helps him cover it up">>
<<dialogue "img/character/david/david.png" "David" "Damn">>
Selena frowns, tapping her fingers against the table.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "He was drunk. A defense lawyer could argue he wasn’t in the right state of mind, that he was coerced">>
<<dialogue $playerAvatar "You" "Doesn’t matter. He wasn’t blacked out; he wasn’t forced. He was bragging, clear as day. Courts accept intoxicated confessions all the time as long as the suspect wasn’t physically impaired to the point of incoherence. This holds up">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Alright. So, what's your order?">>
<<dialogue $playerAvatar "You" "We're gonna need an arrest warrant, Can you write the affidavit, David?">>
<<dialogue "img/character/david/david.png" "David" "Right to it">>
<<dialogue $playerAvatar "You" "It's better that we get this son of a bitch in the cell before the warrant. Can you handle this?">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "You think I can handle a brat?">>
<<dialogue $playerAvatar "You" "Okay, I'm counting on you">>
Silence settles over the room for a beat. Then, David claps his hands together.
<<dialogue "img/character/david/david.png" "David" "Well, shit. Guess we better get some sleep before the big dive. Excuse my language">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "What about me, sir?">>
<<dialogue $playerAvatar "You" "There's a waiter at the victim's workplace; head there and take her testimony">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Yes sir">>
<<dialogue $playerAvatar "You" "Okay, everybody get back to work">>
@@.option-button;[[Go back|SquadRoom]]@@
<<set $Case1Meeting = 0>><<set $RobertoVisit = 1>><<run hideSidebar()>><<set $now to setup.changeDate($now, 'hours', 2)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to your office in the morning")>>
<<run addContact("Riley Bogg", "img/character/riley/rileyavatar.jpg", "555-8524", "", "CallingRiley")>>
<<run setup.showNotification("Added Riley to your contact")>>
<img src="img/character/roberto/roberto.png" width=100%>
Morning light filters through the blinds, casting long shadows across your desk. You barely had time to sip your first coffee when there’s a sharp knock at your office door. Before you can answer, the door swings open. Roberto Fabrizio storms in like he owns the place, his heavy footsteps echoing off the walls. He’s not here to talk—he’s here to intimidate.
<<dialogue "img/character/roberto/robertoavatar.png" "Roberto" "You got some balls">>
<<dialogue $playerAvatar "You" "Morning to you too, Mr. Fabrizio">>
<<dialogue "img/character/roberto/robertoavatar.png" "Roberto" "Don’t play cute with me. I know what you’re doing. You got my boy drunk, tricked him into confessing">>
<<dialogue $playerAvatar "You" "He confessed because he did it">>
<<dialogue "img/character/roberto/robertoavatar.png" "Roberto" "You’re new here, so I’ll give you a free lesson. You don’t touch my family. You don’t touch my business. You walk away from this, and we forget it ever happened">>
<<dialogue $playerAvatar "You" "What if I would refuse?">>
<<dialogue "img/character/roberto/robertoavatar.png" "Roberto" "Then I’ll burn this whole goddamn department to the ground">>
You don’t flinch. You don’t even blink. You just stare at him, unshaken. That only pisses him off more.
<<dialogue "img/character/roberto/robertoavatar.png" "Roberto" "You think you’re some kind of hero? You’re nothing. You’re a nobody in a town you don’t understand. You think these people give a damn about justice? They care about survival. And right now, you’re screwing that up">>
<<dialogue $playerAvatar "You" "You done?">>
His hands curl into fists, like he wants to take a swing at you. For a second, you think he might. Then, with a frustrated snarl, he steps back. He straightens his suit, trying to regain some composure, but his rage is still simmering just beneath the surface.
<<dialogue "img/character/roberto/robertoavatar.png" "Roberto" "You’re making a mistake. You let this go, and we can work something out. You keep pushing, and I promise you—you won’t like what happens next">>
<<dialogue $playerAvatar "You" "I think our conversation is over, Mr. Fabrizio">>
<<dialogue "img/character/roberto/robertoavatar.png" "Roberto" "You have no idea what you just started">>
He mutters before storming out, slamming the door behind him.
@@.option-button;[[Back to work|SheriffOffice]]@@
<<set $RobertoVisit = 0>><<set $Case1Selena = 1>><<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Ask for Selena in the squad room")>>
You step out of your office, tension still thrumming through your veins after Roberto’s little visit. David is leaning against his desk, arms crossed, watching the door Roberto just stormed out of.
<<dialogue $playerAvatar "You" "Where’s Selena? If Roberto knows we’re onto Philip, picking him up just got a hell of a lot harder">>
<<dialogue "img/character/david/david.png" "David" "Last I heard, she was—">>
Before he can finish, the front doors of the station slam open. Selena strides in, gripping Philip Fabrizio by the arm, half-dragging him across the room. He’s disheveled, his designer jacket torn at the sleeve, his lip busted. He stumbles, cursing under his breath, but Selena doesn’t loosen her grip.
<<dialogue "img/character/david/david.png" "David" "Well, that was fast">>
Selena doesn’t slow down, hauling Philip straight past you toward the holding cells.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "You’re welcome">>
Philip twists in her grip, trying to jerk free
<<dialogue "img/character/philip/philipavatar.png" "Philip" "This is bullshit! You can’t do this! You know who I am? You know who my father is?">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Yeah, I do. And that’s why you’re here">>
You follow them down the hall, catching up as she unlocks the cell. Philip whips his head toward you, eyes bloodshot, full of entitled fury.
<<dialogue "img/character/philip/philipavatar.png" "Philip" "You think you’re gonna get away with this? My dad’s not gonna let this slide">>
<<dialogue $playerAvatar "You" "Your dad can scream all he wants. He can threaten, bribe, or throw a tantrum. Won’t change a damn thing">>
<<dialogue "img/character/philip/philipavatar.png" "Philip" "You, you...">>
<<dialogue $playerAvatar "You" "Put him away">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Gladly">>
Selena shoves him inside the cell and slams the door shut. He grips the bars, seething.
<<dialogue $playerAvatar "You" "Nice work. Didn’t think you’d get to him that fast">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "What can I say? He’s not as slippery as he thinks he is. Caught him trying to skip town. Guess he figured dear old Dad wouldn’t be able to fix this one">>
@@.option-button;[[Return|SquadRoom]]@@
<<set $Case1Selena = 0>><<set $Case1MurderCaught = 1>><<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to sleep. Then go to work")>>
<<if $Case1MurderCaught == 1>>
<<goto "SleepAfterCase1MurderCaught">>
<<elseif $SleepAfterMcMahonHouseVisit == 1>>
<<goto "SleepAfterMcMahonHouseVisit">>
<<elseif $Chapter2Starter == 1>>
<<goto "Chapter2Starter">>
<<else>><<nobr>>You had a dream<<set $DreamChance = Math.floor(Math.random() * 100)>>
<<if $DreamChance <= 50>>
<img src="img/various/dream1.webp" width=100%>
<<else>>
<img src="img/various/dream2.webp" width=100%>
<</if>>
<</nobr>><</if>><<set $energy to Math.max($energy, $maxEnergy)>> <<set $now to setup.changeDate($now, 'hours', 7)>>
@@.option-button;[[Wake up|Wine Storage]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.1) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.1) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/various/robertopackage.png" width=100% style="display: block; margin: 0 auto;">
You barely have time to settle in before David walks up to you, an odd expression on his face. He drops a package onto your desk—wrapped in thick brown paper, bound with twine. (Say that again.)
<<dialogue "img/character/david/david.png" "David" "This showed up for you">>
You glance at it. No labels. No markings. Just a tightly wrapped bundle.
<<dialogue $playerAvatar "You" "Who delivered it?">>
<<dialogue "img/character/david/david.png" "David" "No idea. Found it at the front desk">>
<<dialogue $playerAvatar "You" "Get Monroe. I want this opened properly">>
Monroe stands over the package, pulling on a pair of latex gloves. He mutters as he slices through the twine with a scalpel. Slowly, he peels back the brown paper.
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Gotta say, Sheriff, this is a first for me">>
Lying inside, wrapped in more layers of wet paper, is a fish. A dead, greyish fish, its lifeless eye staring back at you. The faintest smell of salt and decay clings to it.
<<dialogue "img/character/david/david.png" "David" "What the...?">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "A fish? What the hell is that supposed to mean?">>
<<dialogue $playerAvatar "You" "It's a Sicilian message. It means Roberto Fabrizio sleeps with the fishes">>
@@.option-button;[[Leave|KeepingRobertoFish]]@@
<<run hideSidebar()>>
<<set $Case1MurderCaught = 2>><<set $RobertoDead = 0>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsdreception.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Visit Philip in the cell")>>
You step into the dimly lit room, closing the door behind you. From the database, you found out the suspect's identity, Bruno Uranus, 18-year-old currently living with his mother. In the interrogation room, he sits at the metal table, wrists cuffed, eyes shifting nervously. The cheap fluorescent light above hums, casting long shadows across his face. He’s been sitting here for a while now—long enough for exhaustion and fear to creep in.
<<dialogue $playerAvatar "You" "You ready to talk?">>
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "I have nothing to say">>
<<dialogue $playerAvatar "You" "Bruno, you were in the murder victim’s house. That’s not nothing">>
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "I was just looking for something">>
<<dialogue $playerAvatar "You" "And what would that be?">>
Silence. He shifts in his seat, adjusting his wrists. A nervous twitch.
<<dialogue $playerAvatar "You" "Here’s how this plays out. You don’t talk? I book you for breaking and entering. Maybe obstruction, too. You talk? Maybe, just maybe—I listen">>
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "…Something valuable">>
<<dialogue $playerAvatar "You" "Like what?">>
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "I dunno, man. A laptop. I was just told to grab a laptop">>
<<dialogue $playerAvatar "You" "Who told you?">>
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "No one; I just want to buy something nice for my mum">>
You let out a slow breath, tapping a finger on the table and pulling out a piece of cigar. “This was found in the house, still smoking when I found it. I believe this is yours," you say. “You’re not completely honest with me, Bruno."
<<dialogue $playerAvatar "You" "This was found in the house, still smoking when I found it. I believe this is yours. You’re not completely honest with me, Bruno">>
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "I...I..">>
<<dialogue $playerAvatar "You" "How come a 18-year-old kid has this luxurious hobby when he is still living off his mother’s money?">>
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "I was looking for her laptop, okay?">>
<<dialogue $playerAvatar "You" "Why? Why do you want her laptop?">>
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "A friend told me he'll give me $500 to bring him the laptop. He said there are photos of him and the girl, and he doesn't want the police to waste time on him; he even gave me the cigar">>
<<dialogue $playerAvatar "You" "Who is this friend?">>
He hesitates. A flicker of uncertainty crosses his face. You let the silence stretch, let the weight of the room press down on him. Eventually, he exhales sharply, shaking his head.
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "Philip... Philip Fabrizio">>
<<dialogue $playerAvatar "You" "Philip Fabrizio, any relation to Roberto Fabrizio?">>
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "I don’t know; please let me go, sir">>
<<dialogue $playerAvatar "You" "I'm afraid I can't let you go just yet, Bruno. Not after the info you just give me. You understand?">>
A slow, reluctant nod.
<<dialogue $playerAvatar "You" "One more question, do you know where this Philip often hangs out?">>
<<dialogue "img/character/others/suspect1avatar.png" "Bruno Uranus" "The nightclub, I think?">>
<<dialogue $playerAvatar "You" "I'll give you one phone call, call your mom">>
@@.option-button;[[Leave|Cell 1]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $InterrogateSuspectCase1 = 0>><<set $Case1NightClubCCTV = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/interrogationroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to the nightclub. Open at evening and night")>>
<b>Current location: ???</b>
<<nobr>>
<<if setup.isOpeningHours($now)>>
<img src="img/various/SunnyDay.png" width=100% style="filter: brightness(1.0); display: block; margin: 0 auto;">
<<else>>
<img src="img/various/SunnyDay.png" width=100% style="filter: brightness(0.2); display: block; margin: 0 auto;">
<</if>>
<<if $hunger >= 259200000>>
<<set $MCStarve = 1 >>
<<goto "Patient Room">>
<</if>>
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<set $energy = 1>>
<</nobr>>
The world tilts. You blink, shifting back into focus—dim lights overhead, the rough ground beneath your back. The air is cool against your skin, you push yourself up, head pounding, limbs sluggish. A deep breath steadies you. Rubbing a hand over your face, you exhale slowly.
@@.option-button;<<link "Get up">><<goto $home>><</link>>@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/SunnyDay.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Hotel Elevator</div>
<<setPassageVariableNoMap>>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hotel/hotelinside.png][HotelInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/elevator.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Hotel Lounge</div>
<<setPassageVariableNoMap>>
<<if $HowardTalk1 == 1>>@@.option-button;[[Check on the crowd|HowardTalk1]]@@<</if>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelsecondfloor.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Hotel Restaurant</div>
<<setPassageVariableNoMap>>
<<nobr>><<if $MCMoney >= 100>>
@@.option-button;[[Buffet - $100|HotelBuffet]]@@
<<else>>
@@.option-button-disabled;Buffet - $100@@
<</if>><</nobr>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelthirdfloor.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 4</div>
<<setPassageVariableNoMap>>
<<nobr>><<if $DeluxeRoomBookedTime >= $now>>
@@.option-button;<<link "Room 417">><<goto "HotelRoom417">><</link>>@@
<<else>>
@@.option-button-disabled;Room 417@@<</if>>
<<if $OliviaRoom418 == 1>>
@@.option-button;<<link "Room 418">><<goto "HotelRoom418Action">><</link>>@@<</if>><</nobr>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<set $OliviaComplaint1Count = 0>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 6</div>
<<setPassageVariableNoMap>>
<<if $HowardTalk2 == 0>>@@.option-button;[[Knock|HowardTalk2]]@@<</if>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 7</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 5</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 8</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 10</div>
<<setPassageVariableNoMap>>
<<nobr>><<if $JuniorSuiteBookedTime >= $now>>
@@.option-button;<<link "Room 1001">><<goto "HotelRoom1001">><</link>>@@
<<else>>
@@.option-button-disabled;Room 1001@@<</if>><</nobr>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier2floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 9</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 11</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier2floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 12</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier2floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 13</div>
<<setPassageVariableNoMap>>
<<nobr>><<if $PremiumSuiteBookedTime >= $now>>
@@.option-button;<<link "Room 1305">><<goto "HotelRoom1305">><</link>>@@
<<else>>
@@.option-button-disabled;Room 1305@@<</if>><</nobr>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier3floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 14</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier3floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 15</div>
<<setPassageVariableNoMap>>
<<lockPuzzle "6868" "Fifteenth Floor Real">><div class="styled-line"></div>
<select id="locationSelect">
<option value="">Choose where to go...</option>
<option value="Elevator">First Floor</option>
<option value="Second Floor">Second Floor</option>
<option value="Third Floor">Third Floor</option>
<option value="Fourth Floor">Fourth Floor</option>
<option value="Fifth Floor">Fifth Floor</option>
<option value="Sixth Floor">Sixth Floor</option>
<option value="Seventh Floor">Seventh Floor</option>
<option value="Eighth Floor">Eighth Floor</option>
<option value="Ninth Floor">Ninth Floor</option>
<option value="Tenth Floor">Tenth Floor</option>
<option value="Eleventh Floor">Eleventh Floor</option>
<option value="Twelfth Floor">Twelfth Floor</option>
<option value="Thirteenth Floor">Thirteenth Floor</option>
<option value="Fourteenth Floor">Fourteenth Floor</option>
<option value="Fifteenth Floor">Fifteenth Floor</option>
</select>
<<button "Go">>
<<set _destination to jQuery("#locationSelect").val()>>
<<if _destination and _destination != "">>
<<goto _destination>>
<<else>>
(Please select a location)
<</if>>
<<audio "ElevatorDing" play>>
<</button>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier3floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Chicken Brother</div>
<<setPassageVariableNoMap>>
You step into the fast food joint. The smell of greasy fries and sizzling burgers fills the air. A menu board glows above the counter.
@@.option-button;[[Santi the waitress|Santi1]]@@
<div class="styled-line"><center><b>Dine in</b></center></div>
<<nobr>><<if $MCMoney >= 10>>@@.option-button;<<link "Buy and eat Happy Meal - $10">><<set $MCMoney -= 10>><<set $lastate to setup.changeDate($now, 'hours', 24)>><<goto "InsideKFC">><</link>>@@<<else>>@@.option-button-disabled;Happy Meal - $10@@<</if>>
<<if $MCMoney >= 5>>@@.option-button;<<link "Buy and eat Fried Chicken - $5">><<set $MCMoney -= 5>><<set $lastate to setup.changeDate($now, 'hours', 12)>><<goto "InsideKFC">><</link>>@@<<else>>@@.option-button-disabled;Fried Chicken - $5@@<</if>>
<<if $MCMoney >= 7>>@@.option-button;<<link "Buy and eat Chicken Sandwich - $7">><<set $MCMoney -= 7>><<set $lastate to setup.changeDate($now, 'hours', 18)>><<goto "InsideKFC">><</link>>@@<<else>>@@.option-button-disabled;Chicken Sandwich - $7@@<</if>><</nobr>>
<div class="styled-line"><center><b>Takeout</b></center></div>
<<nobr>><<if $MCMoney >= 10>>@@.option-button;<<link "Buy Happy Meal - $10">><<set $MCMoney -= 10>><<addItem "Happy Meal" "img/item/happymeal.png" "Burger, meat sandwich, beans, fries, and red tea." "Fast food." "Consumable" 10 1>><<goto "InsideKFC">><</link>>@@<<else>>@@.option-button-disabled;Happy Meal - $10@@<</if>>
<<if $MCMoney >= 5>>@@.option-button;<<link "Buy Fried Chicken - $5">><<set $MCMoney -= 5>><<addItem "Fried Chicken" "img/item/friedchicken.jpg" "Chicken Brother's infamous Fried Chicken." "Fast food." "Consumable" 5 1>><<goto "InsideKFC">><</link>>@@<<else>>@@.option-button-disabled;Fried Chicken - $5@@<</if>>
<<if $MCMoney >= 7>>@@.option-button;<<link "Buy Chicken Sandwich - $7">><<set $MCMoney -= 7>><<addItem "Chicken Sandwich" "img/item/chickensandwich.jpg" "Fried Chicken Sandwich." "Fast food." "Consumable" 7 1>><<goto "InsideKFC">><</link>>@@<<else>>@@.option-button-disabled;Chicken Sandwich - $7@@<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/chicken/chicken.jpg][ChickenBrother]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/chicken/chickeninside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Pawn Shop</div>
<<setPassageVariableNoMap>>
You step into the pawn shop and look at the items for sale.
@@.option-button;[[Look around|PawnShopBuy]]@@
@@.option-button;[[Leave|PawnShop]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/pawnshop/pawnshopinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Nightclub</div>
<<setPassageVariableNoMap>>
Three bouncers stand between you and the VVIP room.
<<dialogue "img/character/others/bouncer1.png" "Manager" "Back off pal, No VIP Card No Entry">>
<<if $inventory["Nightclub Member Card"]>>@@.option-button;[[Show them your card|VVIP Room]]@@<<else>>@@.option-button-disabled;You don't have VVIP Card@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/nightclub/viproom.jpg][NightclubInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if setup.isOpeningHours($now)>><<goto "Nightclub">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/viproombouncer.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Nightclub</div><<setPassageVariableNoMap>>
<<nobr>>
<<set $NightclubBarChance = Math.floor(Math.random() * 100)>>
<<if $NightclubBarChance <= 25>>
<img src="img/various/clubbar1.webp" width=50% style="display: block; margin: 0 auto;">
<<elseif $NightclubBarChance > 75>>
<img src="img/various/clubbar2.webp" width=30% style="display: block; margin: 0 auto;">
<<elseif $NightclubBarChance > 25 && $NightclubBarChance <=50 >>
<img src="img/various/clubbar3.webp" width=30% style="display: block; margin: 0 auto;">
<<elseif $NightclubBarChance > 50 && $NightclubBarChance <= 75>>
<img src="img/various/clubbar4.webp" width=30% style="display: block; margin: 0 auto;">
<</if>>
<<if $MCMoney >= 60>>
@@.option-button;<<link "🍻 This round’s on me">>
<<set $OnMeCost = Math.floor(Math.random() * 141) + 60>>
<<run setup.showNotification("Your Charisma has increased by 1")>>
<<if $MCMoney >= $OnMeCost>>
<<set $MCMoney -= $OnMeCost>>
<<set $Charisma += 1>>
<<run setup.showNotification("Your paid $" + $OnMeCost)>>
<<else>>
<<set $Charisma += 1>>
<<run setup.showNotification("Your paid $" + $MCMoney)>>
<<set $MCMoney = 0>>
<</if>>
<<goto "NightclubBar">>
<</link>>@@
<<else>>
@@.option-button-disabled;🍻 This round’s on me • Not enough money@@
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/nightclub/nightclub0.png][Nightclub]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/nightclubbar.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Nightclub</div>
<<setPassageVariableNoMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/nightclub/mensrestroom.png][Man]]>><</button>>
<div class="location-name"><b>Men's Restroom</b></div>
</td>
<td>
<<button [img[img/location/nightclub/womensrestroom.png][Woman]]>><</button>>
<div class="location-name"><b>Women's Restroom</b></div>
</td>
<td>
<<button [img[img/location/nightclub/viproom.jpg][NightclubInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if setup.isOpeningHours($now)>><<goto "Nightclub">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/washroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You step into the place, and the scent of lavender and eucalyptus fills the air. It’s meant to be calming, but there’s no real peace here. The moment she sees you, Cassie Lannigan’s face crumbles.
<<dialogue "img/character/cassie/cassieavatar2.png" "Cassie" "Oh God…">>
She exhales, gripping the edge of the desk like it’s the only thing keeping her standing. Her mascara is smudged, her eyes red-rimmed like she hasn’t slept in days. She was a beautiful woman once, but grief has drained the light from her.
<<dialogue "img/character/cassie/cassieavatar2.png" "Cassie" "You’re the sheriff, You’re here because of Rebecca">>
<<dialogue $playerAvatar "You" "I need to talk to you about her. I know it’s hard, but anything you can tell me might help">>
<<dialogue "img/character/cassie/cassieavatar2.png" "Cassie" "I can’t— I can’t do this right now">>
She turns away, arms wrapped around herself, her body shuddering with silent sobs.
@@.option-button;[[Comfort her|ZenMassage2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You give her a moment. Then, softly,
<<dialogue $playerAvatar "You" "Cassie. I know this hurts. But I need you to help me get justice for Rebecca">>
That stops her. Slowly, she turns back to you, tears streaking down her face.
<<dialogue "img/character/cassie/cassieavatar2.png" "Cassie" "Justice? There’s no justice, Sheriff. She’s gone! My baby is gone!">>
Her grief is raw, unfiltered. She grips her own arms so tightly her nails dig into her skin.
<<dialogue "img/character/cassie/cassieavatar2.png" "Cassie" "She was all I had. After my brother and his wife… it was just me and her. I took care of her. I protected her. And I still lost her">>
<<dialogue $playerAvatar "You" "She didn’t have a car, so she walked home from the diner?">>
<<dialogue "img/character/cassie/cassieavatar2.png" "Cassie" "Always. Same time, same route. I should’ve made her take a cab. I should’ve—She never came home that night. I called her. Over and over. And then…She never answered">>
<<dialogue $playerAvatar "You" "Did she ever mention anyone bothering her? A customer, a classmate… someone who made her uncomfortable?">>
Cassie is silent for a moment, staring at the floor. Then, she nods.
<<dialogue "img/character/cassie/cassieavatar2.png" "Cassie" "There was someone. She didn’t say much, but… I could tell. Something was wrong">>
<<dialogue $playerAvatar "You" "Do you know this person?">>
Cassie grips the desk again, like she might collapse. Her lips tremble.
<<dialogue "img/character/cassie/cassieavatar2.png" "Cassie" "I… I don’t know, she never told me a name. But she was scared, Sheriff">>
<<dialogue $playerAvatar "You" "Okay Cassie, that enough">>
She meets your eyes, her face raw with grief. Then, suddenly, she surges forward, grabbing your hands.
<<dialogue "img/character/cassie/cassieavatar2.png" "Cassie" "Please find him. I'll do anything for you if you find the bastard who did this. I don’t care what it takes, what you have to do. Just… bring her justice">>
Her grip tightens. Her whole body is shaking.
<<dialogue $playerAvatar "You" "You have my promise">>
@@.option-button;[[Leave|Massage Parlor]]@@
<<set $now to setup.changeDate($now, 'hours', 3)>>
<<set $ZenMassageTalk1 = 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Cassie", "Solve Rebecca's case, then visit her again")>>
You step into Cassie’s place once more, but this time, the air feels different. The scent of lavender and eucalyptus is the same, but the heavy weight of grief that once hung in the space has lifted—just slightly.
Cassie is behind the front desk when she sees you. For a moment, she just stares, her lips parting, her hands tightening around the edge of the counter. Then, she breathes out a single, shaky word.
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "Hi...">>
<<dialogue $playerAvatar "You" "I think it's my responsibility to come and tell you the news">>
Cassie sways on her feet like the weight of the world just left her shoulders. Her hand flies to her mouth, her eyes welling with fresh tears. But this time, they’re different. They’re relieved.
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "What do you mean?">>
<<dialogue $playerAvatar "You" "We caught the son of a bitch. He’s in a cell, awaiting trial, Rebecca can finally rest in peace">>
Cassie lets out a breath, choked and uneven, before suddenly breaking into a sob. She presses both hands to her face, shoulders trembling. Then, before you can say another word, she rushes around the counter and throws her arms around you. You feel her warmth, her body pressing against yours, desperate and grateful all at once.
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "Thank you, thank you">>
You let her hold on as long as she needs. When she finally pulls back, her eyes are red, but there’s something else in them now—something lighter. She looks at you like you’re the only thing holding her together.
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "Are you sure you are just here to tell me the news? I told you, Sheriff I’d do anything for you">>
@@.option-button;[[Enjoy|ZenMassage4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Cassie lifts a hand to your face, fingers soft against your jaw. Her eyes search yours, and for the first time since you met her, there’s something there that isn’t grief. She pulls you to the massage table and hands you a towel.
<<dialogue "img/character/cassie/cassieavatar3.jpg" "Cassie" "Here, take off your clothes">>
<<dialogue $playerAvatar "You" "Yes, ma'am">>
Cassie’s hands glide over your chest, her fingers pressing into the knots buried deep in your muscles. The oil is warm, slick, and scented with something rich—lavender, maybe a hint of vanilla. It seeps into your skin, mixing with the heat of the room, the low glow of candlelight flickering against the walls.
<img src="img/character/cassie/cassiemassage1.webp" width=100%>
<<dialogue "img/character/cassie/cassieavatar3.jpg" "Cassie" "You’re a mess. I don’t know how you function like this">>
She works her thumbs into the base of your neck, finding the tension there, rolling it out with slow, deliberate pressure. A slow breath escapes you, your head sinking deeper into the padded table. You didn’t realize how tight everything was until she started unraveling you piece by piece. Her hands trail down your spine, fingers pressing, kneading, smoothing out the knots with practiced ease.
She moves lower, her palms pressing into your lower back, working the stress from your body like she’s done this a thousand times. Your scars don't scare Cassie at all; it actually turns her on. She undresses her work uniform and climbs on to you, pouring the rest of the oil on herself, rubbing it on her tits, then gliding on your back.
<<dialogue "img/character/cassie/cassieavatar3.jpg" "Cassie" "Better?">>
<<dialogue $playerAvatar "You" "God yes">>
You grunt in response, too lost in the sensation to form words. She chuckles softly, amused, before turning you over. Every movement is slow, lingering. You hold her tight, grinding her against yourself, despite the slippery oil and sweat.
<<dialogue "img/character/cassie/cassieavatar3.jpg" "Cassie" "Oh my god, please fuck me!">>
@@.option-button;[[As you wish|ZenMassage5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<h2>Grilled Fish</h2><img src="img/item/grilledfish.png" width =100%>
<p><strong>Type:</strong> Consumable</p><p><strong>Full Description:</strong> Grilled whole fish with spices and lemon.</p><<nobr>><<if not $inventory["Grilled Fish"] or not $inventory["Grilled Fish"].quantity>>
<p style="color: red; font-weight: bold;">No Grilled Fish left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Grilled Fish"].quantity>></p>
@@.option-button;<<link "Eat">><<useItem "Grilled Fish">><<goto "BADEnding3Bundle1">><<run $('.popup-overlay').remove()>><</link>>@@<</if>><</nobr>>
Darkness creeps in at the edges of your vision.
This shit tasted… off. A little bitter, a little too rich. But you were starving, exhausted, and figured it was just your mind playing tricks on you.
Then came the gut pain. Sharp. Twisting. Like a knife turning inside you.
You clutch your stomach, stumbling forward, breath hitching. The world tilts violently. Your legs buckle, sending you crashing against the desk. Papers scatter. A glass tumbles, shattering on the floor.
Your heart slams against your ribs, beating too fast, too erratic. Your throat tightens. You try to call for help, but no sound comes out.
You try to move, try to reach for your phone, for anything, but your fingers feel numb. Heavy. The room swims around you, and suddenly, the effort to keep your eyes open feels impossible.
Your body slumps to the ground.
The last thing you hear is the faint hum of the overhead light.
@@.option-button;[[END|BADEnding3]]@@
Or...
<<set $MCDeath = 1>>
@@.option-button;[[LIVE|Patient Room]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/BarIndside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/dead1.png" width=100%>
Bad Ending 3: It's a Sicilian message. It means you sleep with the fishes.
<<button "Restart Game">>
<<run UI.restart()>>
<</button>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Assassin Table</h2><img src="img/item/haleyexam.jpg" width =70%>
<p><strong>Type:</strong> Paper</p><p><strong>Full Description:</strong> Haley's exam result.</p><h2>Obsidian Arrowhead</h2><img src="img/item/artifact3.jpg" width =100%>
<p><strong>Type:</strong> Artifact</p><p><strong>Full Description:</strong> Unknown</p>
<h2>White Diamond</h2><img src="img/item/diamond.png" width =100%>
<p><strong>Type:</strong> Jewelry</p><p><strong>Full Description:</strong> Diamond.</p>
Because of the oil, your cock slides right in Cassie's pussy without any struggle. Cassie moans, a long breath stretching from her throat
<img src="img/character/cassie/cassiedoggy1.webp" width=100%>
<<dialogue "img/character/cassie/cassiesexavatar1.jpg" "Cassie" "Oh… that feels so good…">>
You begin to move your hip, pummel her womb with your throbbing cock while fondling her shiny breasts.
<<dialogue "img/character/cassie/cassiesexavatar2.jpg" "Cassie" "God, I can’t focus, urghh~">>
You speed up and grab her by the neck as you whisper in her ear.
<<dialogue $playerAvatar "You" "Who do you want?">>
<<dialogue "img/character/cassie/cassiesexavatar3.jpg" "Cassie" "You, please!">>
<<dialogue $playerAvatar "You" "What do you want?">>
<<dialogue "img/character/cassie/cassiesexavatar4.jpg" "Cassie" "Your... your cum">>
Cassie tries to hold, but the pleasure is immeasurable. She squirts right on the table. But you are not done yet. You turn her over into the doggy style position and fuck her even harder.
<<dialogue "img/character/cassie/cassiesexavatar5.jpg" "Cassie" "You're a beastttunghh~">>
As Cassie's body went rigid in infront of you and arched to cum again, you reached your limit as well.
<<dialogue $playerAvatar "You" "I'm cumming, Cassie">>
<<dialogue "img/character/cassie/cassiesexavatar6.jpg" "Cassie" "aaghn~aaghn~aaghn~">>
<img src="img/character/cassie/cassiecumontits1.webp" width=100%>
You and Cassie came at the right time. The ecstasy is so surreal. You both fall to the table, with your cock still buried in Cassie's cunt.
<<dialogue "img/character/cassie/cassiesexavatar7.jpg" "Cassie" "ffuhhck~">>
<<dialogue $playerAvatar "You" "You are amazing Cassie">>
<<dialogue "img/character/cassie/cassieavatar3.jpg" "Cassie" "Thank you for everything, Sheriff. Without you, Rebecca will never see justice in this town">>
Cassie sobbing while thanking you. But that sadness quickly becomes lust when she feels your cock slowly brick up inside her pussy again; she starts grinding her ass against you. You fuck her three more rounds before saying goodbye.
@@.option-button;[[Leave|ZenMassage6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Hotel</div>
<img src="img/character/bianca/bianca.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
Bianca's standing behind the front desk, fingers idly tapping against the counter. The soft glow of the antique lamp beside her casts warm light over her sharp features, highlighting the knowing look in her eyes as she watches you approach.
@@.option-button;[[Say Hi|BiancaTalk1]]@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hotel/hotelinside.png][HotelInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelsecondfloor.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue $playerAvatar "You" "Hey, Bianca">>
<<dialogue "img/character/bianca/biancaavatar.jpg" "Bianca" "Sheriff, welcome back">>
<<dialogue $playerAvatar "You" "Just visiting">>
<<dialogue "img/character/bianca/biancaavatar.jpg" "Bianca" "What can I do for you?">>
<<nobr>>@@.option-button;[[How long have you worked here?|BiancaQuestion1]]@@
@@.option-button;[[How much does a night at the hotel cost?|BiancaQuestion2]]@@
@@.option-button;[[What about the Fifteenth floor?|BiancaQuestion3]]@@
@@.option-button;[[Go back|HotelInside]]@@<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelsecondfloor.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue "img/character/bianca/biancaavatar.jpg" "Bianca" "10 months, if I remember correctly">>
@@.option-button;[[Other questions|BiancaTalk1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelsecondfloor.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Her expression doesn’t change, but you notice the briefest hesitation before she responds.
<<dialogue "img/character/bianca/biancaavatar.jpg" "Bianca" "Not for rent">>
<<dialogue $playerAvatar "You" "Who stays up there?">>
<<dialogue "img/character/bianca/biancaavatar.jpg" "Bianca" "People who don’t like questions">>
She doesn’t break eye contact, and for a second, it feels like a test. You could push her, see how much she’s willing to give, or let it go—for now.
@@.option-button;[[Other questions|BiancaTalk1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelsecondfloor.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue "img/character/bianca/biancaavatar.jpg" "Bianca" "That depends on what kind of stay you’re looking for">>
Standard option—floors four to nine. Basic rooms, nothing fancy. Two hundred bucks a night.
Advance option—floors ten to twelve. Bigger rooms, better service, a little more privacy. Five hundred a night.
VIP option—floors thirteen and fourteen. Top-tier suites, personal staff, and the kind of discretion people pay good money for. A thousand a night.
@@.option-button;[[Other questions|BiancaTalk1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelsecondfloor.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Nightclub</div>
<<setPassageVariableNoMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/nightclub/gloryhole.png][Glory Hole]]>><</button>>
<div class="location-name"><b>Glory Hole</b></div>
</td>
<td>
<<button [img[img/location/nightclub/washroom.jpg][Washroom]]>><</button>>
<div class="location-name"><b>Washroom</b></div>
</td>
</tr>
</table><</nobr>>
<<if setup.isOpeningHours($now)>><<goto "Nightclub">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/toilet.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Nightclub</div>
<<setPassageVariableNoMap>><<nobr>>
<<if $GloryHole1 == 1>>
<<set $GloryHoleChance = Math.floor(Math.random() * 100)>>
<<if $GloryHoleChance <= 50>>
<img src="img/various/gloryholeoldman.png" width=50% style="display: block; margin: 0 auto;">
You see an old man walk out of the women's washroom; he seems startled when he sees you.
<<dialogue "img/character/howard/howardavatar.png" "Old man" "The men's washroom is full, so I... an old man's bladder can't wait, you see...">>
He blabber then quickly excuses himself.
<<elseif $GloryHoleChance > 50>>
<img src="img/various/gloryholegirl.webp" width=100%>
The washroom is empty, and you see a beautiful young girl standing near the door; it must be her.
<</if>>
<<set $GloryHole1 = 0>>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/nightclub/washroom.jpg][Washroom]]>><</button>>
<div class="location-name"><b>Washroom</b></div>
</td>
</tr>
</table><</nobr>>
<<if setup.isOpeningHours($now)>><<goto "Nightclub">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/washroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Nightclub</div>
<<setPassageVariableNoMap>>
On the wall in the toilet, there's a glory hole. It's connected to the woman washroom.
@@.option-button;[[Put your cock inside|GloryHole1]]@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/nightclub/mensrestroom.png][Man]]>><</button>>
<div class="location-name"><b>return</b></div>
</td>
</tr>
</table><</nobr>>
<<if setup.isOpeningHours($now)>><<goto "Nightclub">><</if>>
<<audio "Gloryhole" stop>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/gloryhole.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>On the other side, warm breath blowing against your cockhead as it slowly pushes past their soft lips.
Struggling to deepthroat you, they gag slightly then finally manage to swallow half of your impressive length, their throat constricting deliciously around you.
<<dialogue "img/various/unknown.png" "???" "Gluk... gluk...">>
Starts bobbing their head, taking you in and out of their mouth with increasing enthusiasm. You can tell saliva drips down their chin as they serve you, their hands gripping the wall for leverage.
Suck harder, their tongue swirling around the sensitive underside of your cock as they bob faster. The sounds of their enthusiastic fellatio echo through the bathroom, muffled only slightly by the wall separating you.
<<dialogue "img/various/unknown.png" "???" "Mmph... mmph... gggghhkkk...">>
Pull back, gasping for air, while your cock soaks in saliva, hanging on the wall like contemporary art. They dip their head to lick and nibble at your heavy sack, rolling the testicles in their mouth.
You knock on the wall to signal them that you are about to cum.
They resume sucking with renewed vigor, their hand pumping your shaft in rhythm with their bobbing head. They must have already felt your cock twitch and throb, signaling your impending orgasm.
<<dialogue "img/various/unknown.png" "???" "Mmmph... ohhh...">>
As you erupt, they open wide, their tongues lapping greedily at the spurting tip of your cock. Drinks down spurt after spurt, their throat muscles milking you for every ounce of semen.
@@.option-button;[[Pull out|Glory Hole]]@@
<<run hideSidebar()>>
<<set $GloryHole1 = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/toilet.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Salt Bar</div>
<img src="img/character/salt/salt.png" width=100%>
<<setPassageVariableNoMap>>
Salt sits near the counter, wiping down a glass with slow, deliberate motions. His hands are calloused, veins raised like old riverbeds, a lifetime of work and regret carved into his skin. His white beard is neatly trimmed, his eyes sharp beneath bushy brows.
@@.option-button;[[Talk to Salt|SaltTalk]]@@
<<if $inventory["Creed Championship Belt"]>>@@.option-button;[[Give Salt the belt|SaltTalk1]]@@<<else>>@@.option-button-disabled;Give Salt the belt@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bar/barinside.jpg][SaltBarInside]]>><</button>>
<div class="location-name"><b>The Bar</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Slow night">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Ain't ever fast. You drinking?">>
<<dialogue $playerAvatar "You" "Not tonight">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "You settling in alright at the wine house?">>
Salt shrugs, pouring himself a shot instead. You watch as he downs it in one smooth motion, setting the glass aside without a sound.
<<dialogue $playerAvatar "You" "Can’t complain. How long you been running this place?">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Too long. Inherited it from my old man. He ran it mean. I run it steady. Just enough to keep the doors open, not enough to invite the wrong kind of trouble">>
<<dialogue $playerAvatar "You" "But here we are">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "But here we are">>
@@.option-button;[[Leave|SaltBar]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Park</div>
<<setPassageVariableNoMap>>
@@.option-button;<<link "Sit more">><<set $now = setup.changeDate($now, 'hours', 1)>><<set $energy to Math.min($energy + 5, $maxEnergy)>> <<goto "Sit on a bench">>><</link>>@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/park/park.jpg][Park]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/park/bench.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Warehouse</div>
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isEvening($now) || setup.isNight($now)>>
<<if $Case1CigarEvidence1 ==1>>@@.option-button;[[A suspicious car slowly approaches|Case1WarehouseLead]] @@<</if>>
<<if $RissaIntro == 1>>@@.option-button;[[Naked Woman|RissaIntro]] @@<</if>>
<<if $RissaSecondMeet == 1 && $RissaBrother == 1 and $Charisma >= 4 and $Intelligence >= 5 and $energy >= 10>>
@@.option-button;<<link "Rissa">><<goto "Rissa3">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $RissaSecondMeet == 1 && $RissaBrother == 1>>
@@.option-button-disabled;Rissa • 💬 Charisma 4 • 🧠 Intelligence 5 • ⚡ Energy 10@@<</if>>
<<if $RissaThirdMeet == 1>>@@.option-button;[[Rissa|RissaVisit1]]@@<</if>>
<<else>>
You wait but nothing happens.
<</if>><</nobr>>
@@.option-button;[[Wait more|Sneak through the air vent]] @@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/warehouse/warehouse.png][Warehouse]]>><</button>>
<div class="location-name"><b>Warehouse</b></div>
</td>
</tr>
</table><</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/airventnothing.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Cigar</h2><img src="img/various/case1cigar.png" width =70%>
<p><strong>Type:</strong> Evidence</p><p><strong>Full Description:</strong> A high end cigar dropped by the suspect.</p>
Using the lockpick, you break into the house of that rude single mom. A petty revenge, but you are a thief before you are a sheriff, and you need money now.
You move quickly but carefully, scanning the dimly lit interior. The air smells like expensive cologne and aged whiskey. A place like this has to have a safe, maybe tucked behind a painting or inside an office. Jewelry, cash, something worth the risk. You pass through a study lined with bookshelves, spotting a silver watch left carelessly on the desk. You pocket it without hesitation.
Then—you hear it.
A noise from upstairs. A faint moan.
@@.option-button;[[Get Upstairs|SingleMom2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Danni House</div>
<<setPassageVariableMap>>
<<nobr>><<if setup.isEvening($now) || setup.isNight($now)>>
<<if $inventory["Lock Pick"] && $rudeBitch1 == 1 and $Intelligence >= 2 and $Endurance >= 2 and $energy >= 10>>
@@.option-button;<<link "Break in">><<goto "SingleMom1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $inventory["Lock Pick"] && $rudeBitch1 == 1>>
@@.option-button-disabled;Break in • 🧠 Intelligence 2 • 🛡️ Endurance 2 •⚡ Energy 10@@<</if>>
<<if $inventory["Key Makers Toolbox"] && $Danni2 == 1 and $Intelligence >= 3 and $Endurance >= 2 and $energy >= 10>>
@@.option-button;<<link "Break in">><<goto "DanniBreakIn2">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $inventory["Key Makers Toolbox"] && $Danni2 == 1>>
@@.option-button-disabled;Break in • 🧠 Intelligence 3 • 🛡️ Endurance 2 •⚡ Energy 10@@<</if>>
<<if $Danni4 == 1>>@@.option-button;[[Knock|DanniVisit1]]@@<</if>>
<<else>>
<<if $DanniHouseStalk == 1>>@@.option-button;[[Look inside|DanniPeeking]]@@<</if>>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/northresidentarea/northresidentarea.jpg][North Residential Area]]>><</button>>
<div class="location-name"><b>North Residential Area</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannihouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You move upstairs, each step slow and measured. The house is quiet, but that noise—it wasn’t your imagination.
At the end of the hall, a bedroom door is slightly ajar, warm light spilling from within. You push it open just enough to see inside.
There, lying on the bed, is the woman. The rude bitch.
Lost in thought, she's unaware of the voyeur.
<img src="img/character/danni/dannimasturbate1.webp" width=100%>
Her free hand slides under her shirt to cup a heavy breast, thumbing the nipple through the fabric. She loosens her shorts, letting it pool around her ankles, revealing lacy black panties that cling to her moist sex. Hooking a finger into the waistband, she pulls the garment aside, fully exposing her bare, glistening pussy.
With a sultry sigh, she sinks two fingers deep inside herself, pumping slowly as her other hand continues to tease her throbbing clit. Her hips undulate, fucking her digits as she loses herself in the pleasure. Her breath hitches, and she bites her lip, trying to stifle the increasingly loud moans escaping her mouth.
@@.option-button;[[Come In|SingleMom3][$moral -= 5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Startled by the sudden intrusion, she freezes mid-masturbation, her face flushing bright red with shock and embarrassment. She quickly tries to cover herself, scrambling to pull her short back up and yank her panties back into place.
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Wh-who's there?! What do you think you're doing, barging in like that?!">>
Her chest heaving with a mix of anger and humiliation. Her nipples, still hard from arousal, press against the thin fabric of her bra. With a strength advantage, you make your move first.
Caught off guard, she cries out in surprise as strong arms wrap around her, pinning her down onto the bed. As you pounce on top of her, she lets out a startled yelp, her hands flying up to try and push you away. But your weight pins her down effortlessly. You latch onto one of her breasts, drawing the nipple into your mouth and suckling greedily.
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Mmph... oh my... w-what are you...?">>
@@.option-button;[[Fuck|SingleMom4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Before she can process what's happening, you abruptly flip her over onto her stomach, her face pressed into the cushions. You yank her underwear down to her knees, leaving her exposed and vulnerable.
Then, without warning, you plunge into her, driving your hard length deep inside her neglected cunt. She cries out in surprise and pain, her body tensing up at the sudden intrusion.
<<dialogue "img/character/danni/dannisexavatar1.jpg" "Danni" "Aaahh! Oh god, stop! Please...">>
She begs, tears pricking at the corners of her eyes. But her pleas fall on deaf ears as you continue to pound into her relentlessly, your hips slapping against her plump ass with each brutal thrust.
Despite the initial discomfort, she can't deny the strange, tingling sensations building within her core.
<img src="img/character/danni/dannisex1.webp" width=100%>
Your relentless pace sends jolts of pleasure-pain through her body, making her cry out again. She's never experienced anything like this before, the raw, animalistic intensity of your fucking. Her mind reels, struggling to keep up with the overwhelming stimuli.
<<dialogue "img/character/danni/dannisexavatar2.jpg" "Danni" "Ohhh... fuuuck... s-so fast... too much...">>
She pants, her words punctuated by moans and whimpers. Her hands scrabble at the couch cushions, seeking purchase as you rut into her like a beast in heat.
As you finally reach your climax, she feels your cock throbbing and pulsating inside her, filling her with your hot seed. The sensation triggers something deep within her, and she experiences an intense orgasm of her own, her pussy clenching around you rhythmically.
<<dialogue "img/character/danni/dannisexavatar3.jpg" "Danni" "Oh god, I'm cumming!">>
Danni's body shaking and quivering beneath yours. Waves of pleasure crash over her, more powerful than anything she's ever felt before.
As the aftershocks subside, she collapses onto the couch, spent and panting heavily. She can feel your softening member slipping out of her, followed by a trickle of your cum leaking down her thigh.
@@.option-button;[[Leave|SingleMom5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<h2>Lock Pick</h2><img src="img/item/lockpick.jpg" width =100%>
<p><strong>Type:</strong> Tool</p><p><strong>Full Description:</strong> Lock Pick.</p>
As soon as the elevator door open, countless gun aim at you.
<<dialogue $playerAvatar "You" "Easy now">>
They just smirk at you.
<img src="img/various/gundown.webp" width=100%>
[[BAD END|BADEnding4Bundle1]]
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier3floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/dead1.png" width=100%>
Bad Ending 4: Welcome back SpongeBob.
<<button "Restart Game">>
<<run UI.restart()>>
<</button>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Gunfire erupts.
A wall of bullets tears through you before you even have time to react. The force sends you staggering back, pain exploding in every nerve as your body is ripped apart by the onslaught. You barely register the masked men in the dimly lit room, their weapons trained on you, their expressions cold and merciless.
Your vision tunnels. Your knees buckle. You hit the floor hard, the warmth of your own blood pooling beneath you. The last thing you hear is the sound of footsteps approaching, the click of a safety being re-engaged.
@@.option-button;[[END|BADEnding4]]@@
Or...
<<set $MCDeath = 1>>
@@.option-button;[[LIVE|Patient Room]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier3floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Squad Room</div>
<img src="img/character/david/david.png" width=70% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
<<dialogue "img/character/david/david.png" "David" "Hey, what's up?">>
<<nobr>><<if $Case1Solve >= 1 && $DavidDiningInvite1 == 1 and $Charisma >= 5 and $energy >= 10>>
@@.option-button;<<link "Talk to David">><<goto "DavidDinner1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $Case1Solve >= 1 && $DavidDiningInvite1 == 1>>
@@.option-button-disabled;Talk to David • 💬 Charisma 5 •⚡ Energy 10@@<</if>>
<<if $DavidInvestigate1 == 1>>
@@.option-button;[[Send David to investigate|DavidInvestigate1]]@@
<</if>>
<<if $DavidConvince1 == 1 and $Charisma >= 7 and $energy >= 10>>
@@.option-button;<<link "Talk to David">><<goto "DavidTalk1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $DavidConvince1 == 1>>
@@.option-button-disabled;Talk to David • 💬 Charisma 7 •⚡ Energy 10@@<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/squadroom.jpg][SquadRoom]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Squad Room</div>
<img src="img/character/selena/selena.jpg" width=100%>
<<setPassageVariableNoMap>>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "What do you want?">>
<<if $Case1Solve >= 1 && $SelenaBar1 == 1 and $Charisma >= 5 and $energy >= 10>>
@@.option-button;<<link "Talk to Selena">><<goto "SelenaBar1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $Case1Solve >= 1 && $SelenaBar1 == 1>>
@@.option-button-disabled;Talk to Selena • 💬 Charisma 5 •⚡ Energy 10@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/squadroom.jpg][SquadRoom]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Squad Room</div>
<img src="img/character/riley/riley.png" width=70% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>><<nobr>>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "How can I help you, sir?">>
<<if $Case1Solve >= 1 && $RileyHouse1 == 1 and $Charisma >= 5 and $energy >= 10>>
@@.option-button;<<link "Talk to Riley">><<goto "RileyHouse1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $Case1Solve >= 1 && $RileyHouse1 == 1>>
@@.option-button-disabled;Talk to Riley • 💬 Charisma 5 •⚡ Energy 10@@<</if>>
<<if $RileyBSDSex == 1>>@@.option-button;[[Grab Riley's ass|RileyBSDSex1]]@@<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/squadroom.jpg][SquadRoom]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Doctor Office</div>
<img src="img/character/evelyn/evelyn.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Are you a patient?">>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hospital/doctoroffice.png][Doctor Office]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if $HospitalVisit >= 3 && $EvelynTalk1 ==1>><<goto "EvelynChat0">><</if>>
<<if $EvelynTalk2 == 1>><<goto "DoctorVisit1">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/location/bar/saltbar.jpg" width=100%>
Eventually, you end up in an old bar near the highway.
@@.option-button;[[Get inside|Prologue14]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/saltbar.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
The mayor led you further in, past a row of desks cluttered with files and old coffee mugs. A man in his late thirties, wearing a wrinkled uniform, looked up from a whiteboard covered in notes. His badge identified him as deputy David.
<img src="img/character/david/david.png" width=70% style="display: block; margin: 0 auto;">
<<dialogue "img/character/david/david.png" "David" "Good morning, mayor">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "This is Sheriff $PlayerInput and this is deputy David Hamlin. He’s one of the top 10 watchers in the state">>
<<dialogue $playerAvatar "You" "Nice to meet you">>
<<dialogue "img/character/david/david.png" "David" "Welcome to the BSD">>
A young woman at one of the desks stood up, clearly noticing your arrival. She approached quickly, her uniform pristine and her posture sharp.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "And this is...sorry, I keep forgetting your name">>
<img src="img/character/riley/riley.png" width=70% style="display: block; margin: 0 auto;">
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Sheriff $PlayerInput, I’m deputy Riley Bogg. Just graduated from the academy last month. It’s an honor to meet you, sir">>
<<dialogue $playerAvatar "You" "deputy Riley. Good to meet you">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "David, where is Deputy Lockett?">>
<<dialogue "img/character/david/david.png" "David" "Oh, Selena’s out on patrol right now; she might come back any minute now">>
@@.option-button;[[Chat|Prologue21.2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
The front door of the station slammed open with a loud clang, the sound reverberating through the quiet space. Everyone turned toward the entrance as an deputy stormed in, dragging a wiry thug by the arm.
<img src="img/character/selena/selena.jpg" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Found this piece of trash trying to break into the warehouse">>
<<dialogue "img/various/unknown.png" "Thug" "Let go of me! I didn’t do anything!">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Fight me again, and I will rip your fucking balls off. That crowbar in your hand must’ve been for opening birthday presents, huh?">>
You watched as Selena locked the thug in a cell, slamming the barred door shut with authority. She turned back toward you and David, her piercing gaze falling on you for the first time.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "So, they chose you to be the sheriff">>
<<dialogue $playerAvatar "You" "$PlayerInput. Looking forward to working with you">>
@@.option-button;[[Greet her back|Prologue22]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">BSD</div>
<<setPassageVariableNoMap>>
<<nobr>><<if $Case1PhilipSuspect == 1>>
@@.option-button;[[Check out Rebecca's workplace]]@@
<</if>>
<<if setup.isOpeningHours($now)>>@@.option-button;[[Talk to Donna|Donna]]@@<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/sheriffoffice.png][SheriffOffice]]>><</button>>
<div class="location-name"><b>Sheriff Office</b></div>
</td>
<td>
<<button [img[img/location/bsd/squadroom.jpg][SquadRoom]]>><</button>>
<div class="location-name"><b>Squad Room</b></div>
</td>
<td>
<<button [img[img/location/bsd/emptyarmory.png][Armory]]>><</button>>
<div class="location-name"><b>Armory</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/bsd/morgue.jpg][Morgue]]>><</button>>
<div class="location-name"><b>Morgue</b></div>
</td>
<td>
<<button [img[img/location/bsd/cell.jpg][Cell]]>><</button>>
<div class="location-name"><b>Cell Rooms</b></div>
</td>
<td>
<<button [img[img/location/bsd/firingrange.png][FiringRange]]>><</button>>
<div class="location-name"><b>Firing Range</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/bsd/bsd.jpg][BSD]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if $RobertoDead == 1>>
<<goto "RobertoDeath">>
<</if>>
<<if $Case1Solve == 2 && $SheriffLetter1 == 1>>
<<goto "MarinaLetter">>
<</if>>
<<if $Danni1 == 1 && $now >= $DanniReportTime1>>
<<goto "DanniTalk1">>
<</if>>
<<if $Danni3 == 1 && $now >= $DanniReportTime2>>
<<goto "DanniTalk2">>
<</if>>
<<if $JocelynPoliceReport == 1 && $now >= $JocelynPoliceReportTime>>
<<goto "JocelynPoliceReport">>
<</if>>
<<if $MarinaAbuseProof == 1 && $now >= $MarinaAbuseProofTime>>
<<goto "MarinaAbuseProof">>
<</if>>
<<if $McMahonJailConfront == 1 && $now < $JackMcMahonReleaseTime>>
<<goto "McMahonJailConfront">>
<<elseif $McMahonJailConfront == 1 && $now >= $JackMcMahonReleaseTime>>
<<goto "BadEnding6Bundle2">>
<</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsdreception.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">BSD</div>
<img src="img/character/donna/donna.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
<<dialogue "img/character/donna/donnaavatar.jpg" "Donna" "Sheriff, do you need anything?">>
@@.option-button;[[Back|BSDInside]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsdreception.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>After the incident. A quiet investigation into your background has been made. It's not long before they found out who you really are.
One morning, you step into the BSD like any other day—except something’s off. You turn.
Two state officers stand at the entrance, badges glinting under the fluorescent lights. Behind them, the mayor himself, arms crossed, a look of cold dissapoinment on his face.
<<dialogue "img/various/unknown.png" "State officer 1" "You there, we need you to come with us">>
<<dialogue $playerAvatar "You" "It's over, they know">>
@@.option-button;[[END|NEUTRALEnding1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/arrested1.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You wait for the analysis, arms folded, tapping your fingers against your bicep.
<<dialogue $playerAvatar "You" "So, what can you tell me?">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Nothing">>
<<dialogue $playerAvatar "You" "What do you mean, nothing?">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "No DNA. No match in the system, no usable sample. Whoever smoked this either didn’t leave enough traceable saliva… or they were smart enough to wipe it before they left">>
<<dialogue $playerAvatar "You" "Could it have been planted?">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "Maybe. Or maybe our guy just rich... and also an idiot">>
<<dialogue $playerAvatar "You" "Rich?">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "You might not have DNA, but you’ve got something just as good">>
<<dialogue $playerAvatar "You" "And that is?">>
<<dialogue "img/character/monroe/monroeavatar.png" "Monroe" "That brand. That’s not something you pick up at the corner store. High-end, imported. Only a handful of places in a town like Bason would even carry something like this—if any">>
You pick up the cigar, turning it between your fingers. The label is barely scorched, still readable. A premium brand. The kind only a certain type of person smokes.
@@.option-button;[[Leave|BSD]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<run hideSidebar()>><<set $MorgueConversation3 = 0>><<set $Case1CigarEvidence1 = 1>><<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/morgue.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Check the warehouse")>>
<h2>Rebecca's Case File</h2><p><strong>Type:</strong> File</p><p><strong>Full Description:</strong> Rebecca's Case File.</p>
------------------------------------------------------------------------------------------------
The Murder of Rebecca Lannigan
Victim: Rebecca Lannigan
<img src="img/various/rebeccalanniganautopsy.png" width=100%>
Age: 22
Last seen: 27/12/2025, leaving her shift at the Route 9 Diner around 11:00 PM.
Discovery: Her body was found three days later in the woods, roughly ten miles from her home. Cause of death was determined to be blunt force trauma to the back of the victim's head, with signs of a struggle.
Details: Rebecca Lannigan was born in Bason, the only child of Tom and Elaine Lannigan( both deceased). she currently living with her aunt, Cassie Lannigan, a familiar face in the community. Rebecca is known for her friendly demeanor and strong work ethic. Rebecca is a college student at Bason College. After school, she works as a waitress at Route 9 Diner till 11 PM, a routine she has followed since starting college two years ago.
The night of her disappearance, Rebecca left her shift as usual, heading home on foot. When she didn’t return, her aunt reported her missing the next morning. Her body was discovered three days later in the woods, concealed under a layer of brush. Investigators noted signs of a struggle, but no personal belongings—such as her phone or purse—were found at the scene.
---------------------------------------------------------------------------------------------
<<if $Case1Solve >= 1>>
Case solved.
<<link "Archive">><<useItem "Rebecca's Case">><<goto $prevPassage>><<run $('.popup-overlay').remove()>><</link>>
<</if>>
<div class="location-banner">Sheriff Office</div>
<img src="img/various/pcscreen1.png" width=70% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
@@.option-button;[[Case files]]@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/sheriffoffice.png][SheriffOffice]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Church</div>
<img src="img/character/maria/mariapraying.png" width=100%>
<<setPassageVariableNoMap>>
<<if $MariaTalk1 == 1>>@@.option-button;[[Talk to Sister Maria|MariaTalk1]]@@<<else>>Sister Maria is praying.<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/church/churchhall.png][ChurchInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/church.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/maria/mariapraying.png" width=100%>
A young woman in a simple habit, her head bowed, hands clasped tightly in front of her. You watch her for a moment—there’s something serene about her presence. Eventually, she finishes, crossing herself before slowly rising. She notices you and offers a soft, warm smile.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "You must be the new sheriff. I’m Sister Maria. Prioress of Saint Morty's Church">>
<<dialogue $playerAvatar "You" "Nice to meet you, Sister">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Would you like to come to the back for some tea?">>
She turns slightly, gesturing toward a narrow hallway leading behind the altar, where the old rectory offices and living quarters are.
@@.option-button;[[Drink tea|MariaTalk2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/churchhall.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/maria/mariaavatar.png" "Maria" "How may I help you?">>
<<dialogue $playerAvatar "You" "Nothing, just getting to know the town, and I also want to meet the priest">>
Sister Maria hesitates, her voice tinged with bitterness.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "We haven’t had a priest in nearly six months. Monsignor Donovan took the church funds. Emptied everything—savings, donations, even the maintenance budget. Then he vanished">>
<<dialogue $playerAvatar "You" "Why don't you report this to us?">>
She stops in front of a modest door, one hand resting on the knob, the other still loosely holding her rosary. She doesn’t turn around at first—just exhales slowly.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "This is the church's matter, God made it clear he wanted to handle it internally...">>
A heaviness settles in your limbs. Your thoughts start to feel… slow. Distant. It's like your mind is trying to wade through thick mud. The cup of tea slips slightly in your hand, and you catch it just in time.
Maria watches you closely now. Too closely. The room tilts. You try to stand, but your knees buckle beneath you.
<<dialogue $playerAvatar "You" "What… did you…">>
Maria steps forward, catching you gently as you sink toward the floor. She kneels beside you, brushing a hand over your hair like a mother calming a child.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Forgive me. This will end soon">>
Your vision tunnels. The edges of the world blur, curling inward. Her voice follows you into the dark.
@@.option-button;[[Dream|MariaTalk3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/churchhall.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>As you drift into unconsciousness after drinking the tea, you find yourself in a strange, disorienting state—aware, but unable to move. It's as if you're floating in a thick fog, unable to see anything clearly but feeling every sensation intensely.
<img src="img/various/drughands.webp" width=100%>
@@.option-button;[[Dream|MariaTalk4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/starrynight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">University</div>
<<setPassageVariableNoMap>><<nobr>><<if setup.isOpeningHours($now)>>
<<if $HaleyFirstMeet == 1 and $Charisma >= 3 and $Intelligence >= 1 and $energy >= 10>>
@@.option-button;<<link "Talk to Haley">><<goto "HaleyTalk0">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $HaleyFirstMeet == 1>>
@@.option-button-disabled;Talk to Haley • 💬 Charisma 3 • 🧠 Intelligence 1 • ⚡ Energy 10@@<</if>>
<<if $MaryFirstMeet == 1 and $Charisma >= 5 and $Intelligence >= 2 and $energy >= 10>>
@@.option-button;<<link "Talk to Mary">><<goto "MaryTalk0">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $MaryFirstMeet == 1>>
@@.option-button-disabled;Talk to Mary • 💬 Charisma 5 • 🧠 Intelligence 2 • ⚡ Energy 10@@<</if>><</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/italianclass.png][Italian Class]]>><</button>>
<div class="location-name"><b>Italian Class</b></div>
</td>
<td>
<<button [img[img/location/university/algebraclass.png][Algebra Class]]>><</button>>
<div class="location-name"><b>Algebra Class</b></div>
</td>
<td>
<<button [img[img/location/university/scienceclass.png][Science Class]]>><</button>>
<div class="location-name"><b>Science Class</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/university/university.png][University]]>><</button>>
<div class="location-name"><b>University</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/universityhallway.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">University</div>
<img src="img/character/valentina/valentina.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
<<if setup.isOpeningHours($now)>>
<<dialogue "img/character/valentina/valentinaavatar.jpg" "Valentina" "Ciao">>
<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/italianclass.png][Italian Class]]>><</button>>
<div class="location-name"><b>Italian Class</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/italianclass.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">University</div>
<<nobr>><img src="img/character/cory/cory.jpg" width=50% style="display: block; margin: 0 auto;">
<<if $hunger >= 259200000>>
<<set $MCStarve = 1 >>
<<goto "Patient Room">>
<</if>>
<<if $energy <= 0>>
<<goto "Pass Out">>
<</if>>
<<set $now to setup.changeDate($now, 'minutes', 5)>>
<<set $energy to Math.max($energy - 1, 0)>>
<<checkPayday>>
<</nobr>>
<<if setup.isOpeningHours($now)>>
<<dialogue "img/character/cory/coryavatar.jpg" "Cory" "Are you a student?">>
<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/scienceclass.png][Science Class]]>><</button>>
<div class="location-name"><b>Science Class</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/scienceclass.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">University</div>
<img src="img/character/layla/layla.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
<<if setup.isOpeningHours($now)>>
<<dialogue "img/character/layla/laylaavatar.jpg" "Layla" "You are the new Sheriff, aren't you?">>
<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/algebraclass.png][Algebra Class]]>><</button>>
<div class="location-name"><b>Algebra Class</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/algebraclass.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">University</div>
<<setPassageVariableNoMap>>
<<if setup.isOpeningHours($now)>><<nobr>><<set _before to setup.changeDate($FootBallMatch, 'hours', -2)>><<set _after to setup.changeDate($FootBallMatch, 'hours', 2)>>
<<if $now.getTime() >= _before.getTime() and $now.getTime() <= _after.getTime()>>
@@.option-button;[[Final Match|FootBallMatch1]]@@
<<elseif $now >= $FootBallMatch && $GameMode <= 2>>
@@.option-button;[[Final Match|FootBallMatch1]]@@
<</if>><</nobr>>
<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/lockerroom.png][Locker Room]]>><</button>>
<div class="location-name"><b>Locker Room</b></div>
</td>
<td>
<<button [img[img/location/university/university.png][University]]>><</button>>
<div class="location-name"><b>University</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/footballfield.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">University</div>
<<setPassageVariableNoMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/footballfield.png][Football field]]>><</button>>
<div class="location-name"><b>Football field</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/lockerroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Gym</div>
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
@@.option-button;[[Blond girl|Kelsey1]]@@
@@.option-button;[[Work out|GymWorkOut]]@@
<<if $CarrieGymSpying1 == 1>>@@.option-button;[[Spy On Carrie|CarrieSpying2]]@@<</if>>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/mall/restaurant.png][Fancy Restaurant]]>><</button>>
<div class="location-name"><b>Fancy Restaurant</b></div>
</td>
<td>
<<button [img[img/location/mall/cinema.jpg][Cinema]]>><</button>>
<div class="location-name"><b>Cinema</b></div>
</td>
<td>
<<button [img[img/location/mall/mallsecurity.jpg][Mall Security Office]]>><</button>>
<div class="location-name"><b>Mall Security Office</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/mall/mallinside.png][MallInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/gym.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Cinema</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/mall/gym.jpg][Gym]]>><</button>>
<div class="location-name"><b>Gym</b></div>
</td>
<td>
<<button [img[img/location/mall/restaurant.png][Fancy Restaurant]]>><</button>>
<div class="location-name"><b>Fancy Restaurant</b></div>
</td>
<td>
<<button [img[img/location/mall/mallsecurity.jpg][Mall Security Office]]>><</button>>
<div class="location-name"><b>Mall Security Office</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/mall/mallinside.png][MallInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/cinema.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Mall Security Office</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/mall/gym.jpg][Gym]]>><</button>>
<div class="location-name"><b>Gym</b></div>
</td>
<td>
<<button [img[img/location/mall/cinema.jpg][Cinema]]>><</button>>
<div class="location-name"><b>Cinema</b></div>
</td>
<td>
<<button [img[img/location/mall/restaurant.png][Fancy Restaurant]]>><</button>>
<div class="location-name"><b>Fancy Restaurant</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/mall/mallinside.png][MallInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/mallsecurity.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Fancy Restaurant</div>
<<setPassageVariableNoMap>>
<<nobr>><<set _before to setup.changeDate($MarinaMeetUp, 'hours', -2)>><<set _after to setup.changeDate($MarinaMeetUp, 'hours', 2)>>
<<if $now.getTime() >= _before.getTime() and $now.getTime() <= _after.getTime() and $MarinaRestaurantMeet == 1>>
@@.option-button;[[Sit near the figure|MarinaMeetUp1]]@@
<<elseif $now >= $MarinaMeetUp && $GameMode <= 2 and $MarinaRestaurantMeet == 1>>
@@.option-button;[[Sit near the figure|MarinaMeetUp1]]@@
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/mall/gym.jpg][Gym]]>><</button>>
<div class="location-name"><b>Gym</b></div>
</td>
<td>
<<button [img[img/location/mall/cinema.jpg][Cinema]]>><</button>>
<div class="location-name"><b>Cinema</b></div>
</td>
<td>
<<button [img[img/location/mall/mallsecurity.jpg][Mall Security Office]]>><</button>>
<div class="location-name"><b>Mall Security Office</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/mall/mallinside.png][MallInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/restaurant.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Bank</div>
<img src="img/character/gabbie/gabbie.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>><<if setup.isOpeningHours($now)>>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "How may I help you, sir?">>
@@.option-button;[[Check Bank Account]]@@
<<if $Gabbie1 ==1>>@@.option-button;[[Talk to Gabbie|Gabbie1]]@@<</if>><</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bank/bankinside.png][BankInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/bankinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Warehouse</div>
<img src="img/character/rissa/rissa.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "Hi">>
<<if $RissaFirstMeet == 1 and $Charisma >= 1 and $Intelligence >= 2 and $energy >= 10>>
@@.option-button;<<link "Talk to Rissa">><<goto "Rissa1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $RissaFirstMeet == 1>>
@@.option-button-disabled;Talk to Rissa • 💬 Charisma 1 • 🧠 Intelligence 2 • ⚡ Energy 10@@<</if>>
<</if>><</nobr>>
<<if $inventory["Rissa Photo Set"]>>
@@.option-button;[[Talk to Rissa|RissaFavor1]]@@
<</if>><<nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/warehouse/warehouse.png][Warehouse]]>><</button>>
<div class="location-name"><b>Warehouse</b></div>
</td>
</tr>
</table><</nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Circle Of Sins</div>
<<setPassageVariableNoMap>>
<<set $CircleOfSins2 = 1>>
<<if $Chapter1TrueEnding == 1 and $CircleOfSins2 == 1 and $inventory["Stone Disk"]>>@@.option-button;[[Place the stone disk on one of the circular emblems|CircleOfSins2]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/church/churchhall.png][ChurchInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if $Chapter1TrueEnding == 1 and $CircleOfSins1 == 1>><<goto "CircleOfSins1">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/circleofsins.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>A quiet office, kettle hissing on a hot plate, steam curling into the air. Evelyn poured the tea, sat across from you, clipboard ready but untouched.
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "You’ve been through hell, sheriff, three times in the ER, and you walk away like nothing happened. I need to understand how you keep getting back up. What drives you">>
<<dialogue $playerAvatar "You" "hmm, ok">>
Evelyn set her clipboard aside. Her voice was calm, clinical, but carried that undertone that made you second-guess the intent.
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Good, please lie back on the table and… unzip your pants">>
<<dialogue $playerAvatar "You" "That part of the test strictly necessary, Doc?">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Well yes, I need to collect your seminal fluid">>
Before you can form a question, Evelyn pull your cock out and start stimulate
<img src="img/character/evelyn/evelyngloves.webp" width=100%>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Relax, I need to know just how much punishment this body of yours can take">>
Evelyn pulled on a pair of gloves, snapping the latex into place. Her words could’ve meant the exam. Or maybe something else.
@@.option-button;[[Continue|EvelynHandjob1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You wake up face down in a patch of dry grass, the sky above a washed-out gray. The late morning sun presses down like a weight, making the pounding in your skull feel even worse. You push yourself up, groaning, hands sinking into dirt and weeds. There’s a metallic taste in your mouth, and the back of your neck stings like someone jabbed you with a needle.
You glance around—open field, on the edge of town, not far from the train tracks.
Your jacket’s still on, badge still in your pocket, but your belt feels lighter. No gun. No phone.
You squint toward the skyline of Bason. Not far. You can walk.
As you move, your mind churns—how the hell did you get here?
You try to piece it together. But… nothing. Not a single clue of what happened.
@@.option-button;[[Leave|MariaTalk8]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/westside/randomarea1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/haley/haleystudent.jpg" width=50% style="display: block; margin: 0 auto;"><<set $tempdate to setup.changeDate($now, "days", 7)>><<set $FootBallMatch to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 15, 0)>>
Turning a corner, you nearly bump into Haley — Carrie's daughter—juggling a pile of textbooks. She steps back just in time, offering you a polite, quick smile.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Sorry! Didn't see you there">>
<<dialogue $playerAvatar "You" "No harm done">>
Before you can move on, she tilts her head slightly, studying you.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "I haven't seen you around before, Are you a professor or something?">>
<<dialogue $playerAvatar "You" "Sheriff, actually. Just... wandering">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "You're the new sheriff, my dad's the mayor. My name is Haley">>
She offers her hand. You shake it — gentle, quick.
<<dialogue $playerAvatar "You" "Nice to meet you, Haley. Kevin raised a beautiful woman">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "So... what brings you to Bason College? We don't usually get law enforcement just roaming around">>
<<dialogue $playerAvatar "You" "The weather">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Ha ha, you are a funny guy, aren't you? Hey, do you like football? You should come to the final match between Black Rock and Vanguard next week—if you have any spare time, of course">>
<<dialogue $playerAvatar "You" "Sure, that sounds fun">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "It's next <<= setup.getWeekday($FootBallMatch)>>, at <<= setup.getFormattedTime($FootBallMatch, '24hour-seconds')>>, I and my cousin are cheerleaders for the Black Rock team, the better team of course, hi hi">>
Before you can say anything, a girl hurries over — short, Latina, with a messenger bag slung over her shoulder. She grabs Haley by the arm.
<img src="img/character/mary/mary.jpg" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/character/mary/maryavatar.jpg" "???" "There you are! Class is about to start!">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Right... Mary, this is the sheriff">>
Mary just nods tightly, already pulling Haley toward the lecture hall. Haley calls over her shoulder as she's swept away.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Don't be late">>
You watch them disappear into the crowd.
@@.option-button;[[Leave|University Hallway]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $HaleyFirstMeet = 0>><<set $HaleyTalk1 = 1>><<run hideSidebar()>><<set $unlockedCharacters.vicki = true>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/universityhallway.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run setup.showNotification("💋New Character Unlocked: Vicki!")>>
<<if $Case1Solve == 1>>
<<run updateGuideTextForStoryline("Mary", "Mary is at the school hallway")>><</if>>
<<run updateGuideTextForStoryline("Haley", "Go to the library")>>
<<run updateGuideTextForStoryline("Vicki", "Attend the football match. Time: "+ formatGameDateTime($FootBallMatch))>><div class="location-banner"> Town Hall</div>
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
@@.option-button;[[Mayor]]@@
@@.option-button;[[Mayor's Secretary]]@@
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/townhall/townhallinside.jpg][TownHallInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townhall/mayorsecretaryworkplace.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner"> Town Hall</div>
<img src="img/character/kevin/kevin.png" width=100%>
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Hello there">>
<<if $Case1Solve >= 1 && $MayorReport1 ==1>>@@.option-button;[[Report|MayorReport1]]@@<</if>>
<<if $MayorTalk1 ==1>>@@.option-button;[[Talk with the Mayor|MayorTalk1]]@@<</if>><</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/townhall/mayorsecretaryworkplace.png][Mayor Office]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townhall/mayoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner"> Town Hall</div>
<img src="img/character/abigail/abigail.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
<<dialogue "img/character/abigail/abigailavatar.jpg" "Abigail" "Can I help you with something?">>
<<if $MayorSecretary1 == 1>>@@.option-button;[[I have something to ask|MayorSecretary1]]@@<</if>>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/townhall/mayorsecretaryworkplace.png][Mayor Office]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townhall/mayorsecretaryworkplace.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/location/warehouse/warehousespy.png" width=100%>
It takes a while. An hour. Maybe more. But then...
A black luxury sedan pulls up to the loading dock. Not a delivery truck. Not a worker’s car. This is someone important.
The warehouse doors creak open, and a man steps out, dressed sharp—black suit, crisp white shirt, gold cufflinks. Even from this distance, you recognize the look. Mafia.
A worker hurries to greet him, carrying a crate of cigars.
You narrow your eyes. Bingo.
The worker opens the crate, and the suited man reaches in, plucking out a cigar and rolling it between his fingers like he knows its worth. He gives a nod. A deal is made.
Whoever he is, he’s the link between Rebecca Lannigan’s murder and whoever was at her house.
@@.option-button;[[Follow the sedan|Case1FollowTheMafia]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/airventnothing.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.3) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.3) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">University</div>
<<setPassageVariableNoMap>><<if setup.isOpeningHours($now)>>
@@.option-button;[[Miss Layla|TeacherLayla]]@@
<<else>>
Nobody here.
<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/universityhallway.png][University Hallway]]>><</button>>
<div class="location-name"><b>Hallway</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/algebraclass.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">University</div>
<<setPassageVariableNoMap>><<if setup.isOpeningHours($now)>>
@@.option-button;[[Mrs. Cory|TeacherCory]]@@
<<else>>
Nobody here..,
<</if>>
<<if $HaleyExamSteal == 1 && setup.isNight($now)>>
@@.option-button;[[Check the cabinet|HaleyExamCheck]]@@
<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/universityhallway.png][University Hallway]]>><</button>>
<div class="location-name"><b>Hallway</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/scienceclass.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">University</div>
<<setPassageVariableNoMap>><<if setup.isOpeningHours($now)>>
@@.option-button;[[Miss Valentina|TeacherValentina]]@@
<<else>>
Nobody here..
<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/universityhallway.png][University Hallway]]>><</button>>
<div class="location-name"><b>Hallway</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/italianclass.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The mayor is behind his desk, a half-drunk cup of coffee next to a mess of papers. He glances up, pauses, then stands.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Well, if it isn’t the new sheriff, fresh off his first real storm">>
<<dialogue $playerAvatar "You" "This is only the beginning">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "I won’t lie to you. I’m glad I put the people of Bason's money in the right place. Taking down a made man not even a month after swearing in is one hell of a start">>
<<dialogue $playerAvatar "You" "I'm flattered">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "But you aren't naive to think the Fadda mafia will kill off one of their made men just because you are the new sheriff, right?">>
<<dialogue $playerAvatar "You" "Enlighten me">>
He pushes off the desk and walks toward the cabinet by the wall. He pulls out a bottle of bourbon and two glasses.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Hope you’re not on duty">>
<<dialogue $playerAvatar "You" "I can bend for one">>
He pours and hands you a glass. The bourbon burns, but it’s not bad. The mayor raises his glass.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Let's just say a few well-placed whispers made their way to certain people and those people then reported it to Don Fadda. I have given you a little push">>
<<dialogue $playerAvatar "You" "How?">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "I told them the new sheriff isn’t just some sheep with a badge. I told them you’re on loan from the Bureau.">>
<<dialogue $playerAvatar "You" "So now they think I’m FIB?">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Yes. But just understand one thing, $PlayerInput. This doesn’t make you untouchable. One wrong move and you will sleep with the fishes just like the Fabrizios">>
<<dialogue $playerAvatar "You" "I'll keep that in mind. Thanks for the drink">>
You finish your drink and stand up, ready to leave.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Oh I must ask… Who will be your first target?">>
<<dialogue $playerAvatar "You" "I don't khow">>
The mayor gives a single, slow nod.
@@.option-button;[[Leave|Mayor Office]]@@
<<set $SheriffLetter1 = 1>>
<<set $MayorReport1 = 0>>
<<set $MoneyInBank += 5000>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townhall/mayoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run setup.showNotification("💸To thank you for solving the murder case, the mayor and the sheriff have awarded you a one-time bonus of $5,000")>>
<<run setup.showNotification("💸Ask the mayor's secretary for more detail")>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to BSD")>>
<<dialogue "img/character/abigail/abigailavatar.jpg" "Abigail" "You’re the sheriff?">>
<<dialogue $playerAvatar "You" "Hey. Just a quick question—who do I talk to about getting paid?">>
<<dialogue "img/character/abigail/abigailavatar.jpg" "Abigail" "Finally getting around to that, huh?">>
She stops typing and leans back in her chair. She opens the PC, goes through some files, and clicks on one.
<<dialogue "img/character/abigail/abigailavatar.jpg" "Abigail" "You’ll need to head to Bank. The city runs payroll through them">>
<<dialogue $playerAvatar "You" "Anyone in particular I should ask for?">>
<<dialogue "img/character/abigail/abigailavatar.jpg" "Abigail" "Yeah, Gabbie. Full name's Gabriella Banks. Handles municipal accounts. She’s responsible for your payroll">>
<<dialogue $playerAvatar "You" "Understood. Thank you....">>
<<dialogue "img/character/abigail/abigailavatar.jpg" "Abigail" "Abigail">>
<<dialogue $playerAvatar "You" "Thank you, Abigail, what a beautiful name">>
<<dialogue "img/character/abigail/abigailavatar.jpg" "Abigail" "You're making me blush ha ha">>
@@.option-button;[[Leave|Mayor Office]]@@
<<set $MayorSecretary1 = 0>>
<<set $GabbieBanker = 1>>
<<run hideSidebar()>>
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townhall/mayorsecretaryworkplace.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Abigail", "You have reached the end of this update")>>
A woman in a fitted gray blazer looks up from her computer. Sharp eyes. Controlled expression. Her office is pristine, down to the single paperweight on her desk.
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "You’re the sheriff?">>
<<dialogue $playerAvatar "You" "That’s right. Just came in to get my salary set up. They told me, you handle the accounts for the department">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Gabriella Banks. Call me Gabbie. I was expecting you to come, sheriff">>
<<dialogue $playerAvatar "You" "Okay. Figured I should probably find out how I’m getting paid">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "City salary comes in biweekly. You’ll need to fill out a few forms, ID, bank info, all that. Once you’re in the system, it runs smooth">>
She nods once, sits back down, and begins typing. As you fill the forms, she glances at you again.
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "So, Sheriff… Bason treating you alright so far?">>
<<dialogue $playerAvatar "You" "It’s been a hell of a welcome">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Yeah. That sounds about right">>
<<dialogue $playerAvatar "You" "You been in Bason long?">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "I was born and raised here. Left for college, then came back">>
<<dialogue $playerAvatar "You" "Done">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Alright. You’ll be paid every other Friday. The money will be deposited to your bank account. You can withdraw it anytime you want">>
<<dialogue $playerAvatar "You" "Thanks. Have a lovely day, Gabbie">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "You too">>
@@.option-button;[[Leave|Gabbie]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $Gabbie1 = 0>><<run hideSidebar()>>
<<set $Gabbie2 = 1>><<useItem "Purple Flask">>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/bankinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Gabbie", "Continue with Chapter I guide")>>
<div class="location-banner">Bank</div>
<<setPassageVariableNoMap>><<if setup.isOpeningHours($now)>>
<b>Balance: $<span id="money-display"><<print $MoneyInBank>></span></b>
@@.option-button;<<link "Withdraw">><<set $MCMoney += $MoneyInBank>><<set $MoneyInBank = 0>><<goto "Check Bank Account">><</link>>@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bank/bankinside.png][BankInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/bankinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You slip quietly into the warehouse through the air vent, expecting the place to be dead empty. It usually is. But tonight, something’s different.
From a hidden spot, you can see a figure.
A woman—mid-20s maybe, barefoot, naked, holding a dildo. She doesn’t notice you. She doesn’t seem to notice anything. She’s just strolling through the empty warehouse like she owns the place.
<img src="img/character/rissa/rissarunning.webp" width=100%>
You stay crouched in the shadows. Slowly, you pull out your phone—careful not to make a sound. You tap the camera, flip it to video, and begin recording.
@@.option-button;[[Follow her|RissaIntro1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Rissa", "Talk to Rissa when she's is working at the warehouse")>>
Rissa’s in work gear: steel-toed boots, worn-out jeans, and a navy-blue warehouse uniform. Her dark hair is pulled back in a tight bun, and there’s a smudge of dust across her cheek. She’s focused, her movements practiced—grabbing a box off the shelf, signing something on a clipboard, and talking briefly to a coworker.
<<dialogue $playerAvatar "You" "Rissa">>
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "Yeah?">>
<<dialogue $playerAvatar "You" "Can I talk with you in private?">>
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "Sure">>
After settling in a quiet area, you reach into your pocket and pull out your phone.
<<dialogue $playerAvatar "You" "This might seem strange, but I was here last night">>
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "What do you mean you were—?">>
You tap the screen. The video plays. Rissa freezes. For a long moment, she just stares at the screen, then back at you. Her face drains of color.
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "You… recorded that?">>
You nod, watching her carefully. She glances around nervously, then grabs your arm and pulls you behind a tall stack of boxes, out of view from the main floor. Her voice comes low and trembling.
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "Please, you can’t show that to anyone—. They’ll think I’m nuts or on something. They’ll fire me. Worse. It’s nothing bad, I swear. I wasn’t doing drugs or whatever it looks like. It’s just… sometimes when I can’t sleep, or when I get overwhelmed. You wouldn’t understand">>
<<dialogue $playerAvatar "You" "No, I do understand">>
@@.option-button;[[Unzip your pant|Rissa2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Rissa's jaw drops as she stares at the massive, throbbing cock inches from her face. Her eyes widen in disbelief and revulsion.
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "You really expect me to suck that...that monster?">>
She recoils. Her mind races, trying to process the situation.
<<dialogue $playerAvatar "You" "Yes, or else">>
With a look of pure loathing, Rissa reaches out and wraps her hand around your monstrous cock. She gives it a rough squeeze, feeling it pulse and throb in her grip.
Rissa's grip tightens around your cock as she leans in, her hot breath washing over the engorged flesh. With a grimace, she parts her lips and extends her tongue, giving the tip a tentative lick.
She wraps her lips around the head, sucking gently to coat it with saliva. The taste is bitter and musky, making her wrinkle her nose in distaste.
<<dialogue "img/character/rissa/rissasexavatar3.jpg" "Rissa" "Ggkkkhh...fuck, you're huge!">>
<img src="img/character/rissa/rissablowjob.webp" width=100%>
<<dialogue "img/character/rissa/rissasexavatar3.jpg" "Rissa" "Mmmph...mmpph...ggkkkhh...">>
Rissa grips the base of your shaft and plunges her head forward, taking as much of your cock into her mouth as possible. Her lips stretch taut around the girth, and she feels the head bump the back of her throat.
<<dialogue $playerAvatar "You" "I'm coming, girl">>
Rissa takes a deep breath, steeling herself for what's to come. She extends her tongue, offering it to you in a gesture of reluctant submission.
<img src="img/character/rissa/rissacumonface.webp" width=100%>
Your hot spurts of semen hit her body, and Rissa sighs in relief.
<<dialogue $playerAvatar "You" "Thank you for your service, Rissa">>
@@.option-button;[[Leave|Rissa2.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
The stadium buzzes with tension under the sunlights. You lean against the rail near the edge of the bleachers, watching as the University of Bason's two rival teams — Black Rock and Vanguard — battle it out in the Bason Cup Final Match.
The cheerleaders lined up just off the field, pom-poms twitching with every near miss and rough tackle. Bright uniforms shimmer under the stadium lights. You can see Haley balancing herself on top of the cheerleaders' pyramid. "Just like her mom," you mumble.
<b>90 MINUTES LATER</b>
Ninety minutes of gritty, foul-heavy play, but neither side has managed to break through. Black Rock’s defense is a wall — tight formation, brutal tackles, no room to breathe.
Vanguard pushes forward in a desperate last-minute counterattack. Their forward sprints up the sideline, ball at his feet, but Black Rock’s defenders are already collapsing back, ready to smother the threat. And when the Black Rock almost catches the attacker, they get distracted.
<img src="img/character/vicki/vickiflash.webp" width=100%>
From the sidelines, one of the Vanguard cheerleaders suddenly stands up on the bench, flashing her tits for all people to see, including the Black Rock. They glance over, eyes glued to her juggling pair of cherries.
<<dialogue "img/character/vicki/vickiavatar.jpg" "Cheerleader" "Look at me! Look at these juicy tits!">>
<<dialogue "img/character/others/vickifriend.jpg" "Cheerleader" "Vicki! Get down!">>
And in that split second of distraction, the Vanguard striker slips through the gap, one-on-one with the keeper — and slams the ball into the net.
The stadium explodes. Students scream, cheerleaders jump, and the Vanguard bench floods the field in celebration. 1–0. Game over. But not for everyone.
As the players begin shaking hands — some graciously, others not — you spot a few of the Black Rocks marching toward the cheer squad, faces tight with fury. Vicki’s already being pulled away by her teammates, laughing nervously.
You stay a little longer, watching from the edge as the crowd filters out, for you know there will be more drama to see. Then you see a man from team Black Rock and Vicki sneak their way to the locker room.
@@.option-button;[[Follow them|Vicki1]]@@
@@.option-button;[[Leave|University]]@@
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/footballfield.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You quietly follow them. From a hidden spot, you can see Vicki surrounded by team Black Rock players. They are fuming at Vicki. They push her around.
<<dialogue "img/various/unknown.png" "21" "Fuck you, you cost us the game AGAIN!">>
<<dialogue "img/character/vicki/vickisexavatar2.png" "Vicki" "I'm sorry. Please, let me go. Let me go">>
Vicki end up with her clothes being strip from her body, being tied down. Vicki pleaded over and over again.
21 pushes her on top of 09, and 09's cock slides through Vicki's cunt smooth like butter.
<<dialogue "img/character/vicki/vickisexavatar2.png" "Vicki" "Oh my God">>
<<dialogue "img/various/unknown.png" "09" "Start fucking her as well, idiots">>
Another cock hit Vicki's second hole. This time, it's rough. Before Vicki can scream. another cock plunge in her mouth. She can't do anything but gag.
<<dialogue "img/character/vicki/vickisexavatar1.png" "Vicki" "Ogh...ogh...ogh">>
<img src="img/character/vicki/vickigangbang1.webp" width=100%>
Her eyes were closed as she felt every thrust stroke against every hole, in no rhythm of any kind.
@@.option-button;[[Wait|Vicki2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/lockerroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>After 5 minutes of relentless fucking, they slowly pull out of her while Vicki gasps for air.
<<dialogue "img/character/vicki/vickisexavatar1.png" "Vicki" "Hah...hah...hah...Please, no more...">>
<<dialogue "img/various/unknown.png" "07" "No! Whore, you deserve this">>
All of them laughing and cursing at Vicki.
<<dialogue "img/character/vicki/vickisexavatar3.png" "Vicki" "HELP ME! ANYONE! HEL...">>
<<dialogue "img/various/unknown.png" "10" "Quick, cover her mouth">>
<img src="img/character/vicki/vickigangbang2.webp" width=100%>
<<dialogue "img/various/unknown.png" "09" "Shut the fuck up!">>
They shuffle and start fucking her again.
@@.option-button;[[Wait|Vicki3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/lockerroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/various/unknown.png" "07" "Uncover her mouth; let's see what the bitch has to say">>
<<dialogue "img/character/vicki/vickisexavatar2.png" "Vicki" "Please, I swear I will not scream; please be gentle">>
<<dialogue "img/various/unknown.png" "09" "Okay, but we can't leave that juicy hole unoccupied, can we?">>
<<dialogue "img/character/vicki/vickisexavatar2.png" "Vicki" "What do you mean...">>
Before Vicki even finishes her sentence. Two cocks plunge into her mouth like a catapult. Filling her mouth so tight, she can't even bite down.
<img src="img/character/vicki/vickigangbang3.webp" width=100%>
@@.option-button;[[Wait|Vicki4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/lockerroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Now, she was gasping and moaning as their very thick cocks thrust in and out of her. One after another, they fill her with thick cum.
<img src="img/character/vicki/vickigangbang4.webp" width=100%>
@@.option-button;[[Wait|Vicki5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/lockerroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Vicki becomes more obedient; she gives 21 a handjob until he comes.
<<dialogue "img/character/vicki/vickisexavatar3.png" "Vicki" "Fuck... fuck, ravish my asshole, keep going">>
<img src="img/character/vicki/vickigangbang5.webp" width=100%>
@@.option-button;[[Wait|Vicki6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/lockerroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>After the gangbang, the football team leaves the locker room. Staying behind is Vicki, covered in cum and with a twitching pussy.
@@.option-button;[[Go inside|Vicki7][$moral -= 5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/lockerroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You finally step in, wearing a balaclava. Vicki hears you coming.
<<dialogue "img/character/vicki/vickisexavatar2.png" "Vicki" "Please...">>
You stay silent.
<<dialogue "img/character/vicki/vickisexavatar2.png" "Vicki" "Wait, who are you?">>
<<dialogue $playerAvatar "You" "It doesn't matter who I am">>
<<dialogue "img/character/vicki/vickisexavatar2.png" "Vicki" "Fuck me, this is why you're here, right? Destroy my pussy!">>
<<dialogue $playerAvatar "You" "If you say so">>
<img src="img/character/vicki/vickisex1.webp" width=100%>
<<dialogue "img/character/vicki/vickisexavatar2.png" "Vicki" "Yes...Yes...Yesssss">>
@@.option-button;[[Cum|Vicki8]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/lockerroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You give her a facial, and she obediently cleans your cock with her mouth.
<img src="img/character/vicki/vickicum1.webp" width=100%>
After that, you help her clean up the mess and then bid her farewell. It turns out she's into this shit, and this is the third time she's sabotaged the football match just so she can fuck the football team.
@@.option-button;[[Leave|Vicki9]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/lockerroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Then, in the blink of an eye, you are in the middle of some kind of ritual; in front of you lies a nun offering herself to you.
<img src="img/various/churchhallucination.webp" width=100%>
There’s a strange calm that settles over you, like the feeling of floating just beneath the surface of water, unable to break through, but at peace for a moment.
@@.option-button;[[Dream|MariaTalk5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/mariaroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.4) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>A voice—soft, distant, yet chilling—finally breaks the silence, though it doesn’t come from anywhere in particular. It feels as though it’s coming from within you, deep inside your mind.
<img src="img/various/churchhallucination2.webp" width=100%>
<<dialogue "img/various/unknown.png" "???" "You're not as free as you think. We'll see what you are capable of. Soon">>
@@.option-button;[[Dream|MariaTalk6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/mariaroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.4) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/churchhallucination1.webp" width=100%>
<<dialogue "img/various/unknown.png" "???" "Dio mio, Dio mio">>
The sensation begins to fade as the echoes grow lower and lower.
@@.option-button;[[Wake up|MariaTalk7]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/mariaroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.4) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Gallery and Credit</div>
@@.option-button;<<link "Go Back">><<goto $prevPassage>><</link>>@@
<<nobr>><div class="chapter-card">
<div class="chapter-number">I</div>
<h1>CHAPTER I</h1>
<div class="chapter-info">WARM WELCOME</div>
</div><</nobr>>
<div class="hint-grid">
<<if $unlockedCharacters.carrie>>
<<characterHint "Carrie" "img/character/carrie/carrieavatar.jpg">>
<<else>>
<<characterHint2 "Carrie" "img/character/carrie/carrieavatar.jpg">>
<</if>>
<<if $unlockedCharacters.cassie>>
<<characterHint "Cassie" "img/character/cassie/cassieavatar1.jpg">>
<<else>>
<<characterHint2 "Cassie" "img/character/cassie/cassieavatar1.jpg">>
<</if>>
<<if $unlockedCharacters.selena>>
<<characterHint "Selena" "img/character/selena/selenaavatar.jpg">>
<<else>>
<<characterHint2 "Selena" "img/character/selena/selenaavatar.jpg">>
<</if>>
<<if $unlockedCharacters.haley>>
<<characterHint "Haley" "img/character/haley/haleyavatar.jpg">>
<<else>>
<<characterHint2 "Haley" "img/character/haley/haleyavatar.jpg">>
<</if>>
<<if $unlockedCharacters.riley>>
<<characterHint "Riley" "img/character/riley/rileyavatar.jpg">>
<<else>>
<<characterHint2 "Riley" "img/character/riley/rileyavatar.jpg">>
<</if>>
<<if $unlockedCharacters.rissa>>
<<characterHint "Rissa" "img/character/rissa/rissaavatar.jpg">>
<<else>>
<<characterHint2 "Rissa" "img/character/rissa/rissaavatar.jpg">>
<</if>>
<<if $unlockedCharacters.maria>>
<<characterHint "Maria" "img/character/maria/mariaavatar.png">>
<<else>>
<<characterHint2 "Maria" "img/character/maria/mariaavatar.png">>
<</if>>
<<if $unlockedCharacters.gabbie>>
<<characterHint "Gabbie" "img/character/gabbie/gabbieavatar.jpg">>
<<else>>
<<characterHint2 "Gabbie" "img/character/gabbie/gabbieavatar.jpg">>
<</if>>
<<if $unlockedCharacters.evelyn>>
<<characterHint "Evelyn" "img/character/evelyn/evelynavatar.jpg">>
<<else>>
<<characterHint2 "Evelyn" "img/character/evelyn/evelynavatar.jpg">>
<</if>>
<<if $unlockedCharacters.olivia>>
<<characterHint "Olivia" "img/character/olivia/oliviaavatar.jpg">>
<<else>>
<<characterHint2 "Olivia" "img/character/olivia/oliviaavatar.jpg">>
<</if>>
</div>
<div class="hint-grid">
<<if $unlockedCharacters.marlene>>
<<characterHint "Marlene" "img/character/marlene/marlenesexavatar2.jpg">>
<<else>>
<<characterHint2 "" "img/character/marlene/marlenesexavatar2.jpg">>
<</if>>
<<if $unlockedCharacters.danni>>
<<characterHint "Danni" "img/character/danni/danniavatar.jpg">>
<<else>>
<<characterHint2 "" "img/character/danni/danniavatar.jpg">>
<</if>>
<<if $unlockedCharacters.cory>>
<<characterHint "Cory" "img/character/cory/coryavatar.jpg">>
<<else>>
<<characterHint2 "" "img/character/cory/coryavatar.jpg">>
<</if>>
<<if $unlockedCharacters.gwen>>
<<characterHint "Gwen" "img/character/gwen/gwenavatar1.jpg">>
<<else>>
<<characterHint2 "" "img/character/gwen/gwenavatar1.jpg">>
<</if>>
<<if $unlockedCharacters.mary>>
<<characterHint "Mary" "img/character/mary/maryavatar.jpg">>
<<else>>
<<characterHint2 "" "img/character/mary/maryavatar.jpg">>
<</if>>
<<if $unlockedCharacters.vicki>>
<<characterHint "Vicki" "img/character/vicki/vickiavatar.jpg">>
<<else>>
<<characterHint2 "" "img/character/vicki/vickiavatar.jpg">>
<</if>>
<<if $unlockedCharacters.jocelyn>>
<<characterHint "Jocelyn" "img/character/jocelyn/jocelynavatar.jpg">>
<<else>>
<<characterHint2 "" "img/character/jocelyn/jocelynavatar.jpg">>
<</if>>
<<if $unlockedCharacters.tara>>
<<characterHint "Tara" "img/character/tara/taraavatar.jpg">>
<<else>>
<<characterHint2 "" "img/character/tara/taraavatar.jpg">>
<</if>>
<<if $unlockedCharacters.marina>>
<<characterHint "Marina" "img/character/marina/marinaavatar.jpg">>
<<else>>
<<characterHint2 "" "img/character/marina/marinaavatar.jpg">>
<</if>>
</div>
<<nobr>><div class="chapter-card">
<div class="chapter-number">II</div>
<h1>CHAPTER II</h1>
<div class="chapter-info">???</div>
</div><</nobr>>
@@.option-button;<<link "Go Back">><<goto $prevPassage>><</link>>@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner2.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<style>
.chapter-card {
background: rgba(0, 0, 0, 0.8);
border: 1px solid #ff4500;
border-radius: 15px;
padding: 30px;
margin: 0 auto 40px auto;
max-width: 600px;
text-align: center;
position: relative;
overflow: hidden;
box-shadow: 0 10px 30px rgba(255, 69, 0, 0.3);
}
.chapter-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #ff4500, #ffcc00, #ff4500);
}
.chapter-card h1 {
color: #ffcc00;
margin: 0 0 10px 0;
font-size: 2.2em;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 2px;
}
.chapter-card .chapter-info {
color: #e0e0e0;
font-size: 1.1em;
margin-bottom: 15px;
opacity: 0.8;
}
.chapter-card .chapter-number {
background: #ff4500;
color: white;
width: 50px;
height: 50px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5em;
font-weight: bold;
margin: 0 auto 20px auto;
position: relative;
}
.chapter-card .chapter-number::after {
content: '';
position: absolute;
inset: -3px;
border: 2px solid #ffcc00;
border-radius: 50%;
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { opacity: 1; transform: scale(1); }
50% { opacity: 0.5; transform: scale(1.1); }
100% { opacity: 1; transform: scale(1); }
}
</style><div class="location-banner">Gym</div>
<img src="img/character/kelsey/kelsey1.webp" width=100%>
<<setPassageVariableNoMap>>
Blonde, early twenties maybe, toned in all the right places. You watch her squat with impressive form. She doesn’t seem like the show-off type. Tank top, black leggings, minimal makeup, and a quiet intensity.
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/mall/gym.jpg][Gym]]>><</button>>
<div class="location-name"><b>Gym</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/gym.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Chicken Brother</div>
<img src="img/character/santi/santi1.png" width=100%>
<<setPassageVariableNoMap>>
<<dialogue "img/character/santi/santiavatar.png" "Santi" "How may I help you, sir?">>
<<if $SantiFirstMeet == 1>>@@.option-button;[[Ask her some questions|Santi2]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/chicken/chickeninside.png][InsideKFC]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/chicken/chickeninside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You sit down at one of the corner tables, the scent of fried batter and seasoned oil settling in like a warm coat. A waitress approaches—brunette, maybe mid-twenties, with a calm presence and a small, polite smile.
<<dialogue "img/character/santi/santiavatar.png" "Santi" "Welcome to Chicken Brother. I’ll be right back to take your order">>
<<dialogue $playerAvatar "You" "Yes. Just a few questions before I order, if you don’t mind, Santi">>
<<dialogue "img/character/santi/santiavatar.png" "Santi" "How do you know my name?">>
<<dialogue $playerAvatar "You" "Your name badge">>
<<dialogue "img/character/santi/santiavatar.png" "Santi" "Oh, silly me. Sure, what do you need to know?">>
<<dialogue $playerAvatar "You" "How long have you worked here?">>
<<dialogue "img/character/santi/santiavatar.png" "Santi" "Two years. Since I finished school">>
<<dialogue $playerAvatar "You" "Who's the owner?">>
<<dialogue "img/character/santi/santiavatar.png" "Santi" "Mister Gus Frank. He’s a good man. Treats the staff right. Real kind, especially around kids. Runs a tight place">>
<<dialogue $playerAvatar "You" "No, sorry. He’s usually in his office, and he doesn’t take time to meet with customers. Always working">>
<<dialogue "img/character/santi/santiavatar.png" "Santi" "Mister Gus Frank. He’s a good man. Treats the staff right. Real kind, especially around kids. Runs a tight place">>
You nod, filing the name away.
@@.option-button;[[Leave|InsideKFC]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/chicken/chickeninside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>[[SheriffOffice]] <div class="location-banner">Hair Salon</div>
<<setPassageVariableMap>><<if setup.isOpeningHours($now)>>
@@.option-button;[[Hair stylish|Paola]]@@
<<else>>
CLOSED.<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/southside/southside.jpg][South Side]]>><</button>>
<div class="location-name"><b>South Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hairsalon/hairsalon.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Library</div>
<<setPassageVariableMap>><<nobr>><<if setup.isOpeningHours($now)>>
<<if $HaleyTalk1 == 1>>
@@.option-button;[[Talk to Haley|HaleyTalk1]]@@
<</if>>
@@.option-button;[[Librarian|Elise]]@@
@@.option-button;[[Read a book|Library Read Book]]@@
<<else>>
CLOSED.<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/southside/southside.jpg][South Side]]>><</button>>
<div class="location-name"><b>South Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/library/library.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Hair Salon</div>
<img src="img/character/paola/paola1.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>><<if setup.isOpeningHours($now)>>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "You look like you need a haircut">>
<<nobr>><<if $PaolaTalk1 == 1>>@@.option-button;[[Talk to Paola|PaolaHaircut1]]@@<</if>><</nobr>><</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hairsalon/hairsalon.jpg][Hair Salon]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hairsalon/hairsalon.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Gym</div>
<<nobr>><<set $GymCheckout = Math.floor(Math.random() * 100)>>
<<if $GymCheckout <= 20>>
<img src="img/various/gymgoer1.webp" width=50% style="display: block; margin: 0 auto;">
<<elseif $GymCheckout > 80>>
<img src="img/various/gymgoer2.webp" width=40% style="display: block; margin: 0 auto;">
<<elseif $GymCheckout > 20 && $GymCheckout <=40 >>
<img src="img/various/gymgoer3.webp" width=100%>
<<elseif $GymCheckout > 40 && $GymCheckout <=60 >>
<img src="img/various/gymgoer4.webp" width=100%>
<<elseif $GymCheckout > 60 && $GymCheckout <=80 >>
<img src="img/various/gymgoer5.webp" width=100%>
@@.option-button;[[Caught the perv|GymVoyeurCaught]]@@
<</if>><</nobr>><<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
<<if $energy >= 10>>
@@.option-button;<<link "Work out">><<set $now = setup.changeDate($now, 'minutes', 30)>><<set $Strength += 1>><<set $energy to Math.max($energy - 10, 0)>><<run setup.showNotification("Your Strength has increased by 1")>><<goto "GymWorkOut">><</link>>@@
<<else>>
@@.option-button-disabled;Insufficient energy@@<</if>>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/mall/gym.jpg][Gym]]>><</button>>
<div class="location-name"><b>Gym</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/gym.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Library</div>
<img src="img/character/elise/elise1.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
<<dialogue "img/character/elise/eliseavatar.jpg" "Elise" "Be quiet, shhhh">>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/library/library.jpg][Library]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/library/library.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/donna/donna1.jpg" width=50% style="display: block; margin: 0 auto;">
You push open the front door of the Bason Sheriff Department. Behind the front desk, Donna, glances up from her crossword.
<<dialogue "img/character/donna/donnaavatar.jpg" "Donna" "Sheriff, someone dropped off a letter for you in the mailbox, I didn’t open it">>
<<dialogue $playerAvatar "You" "Thanks, Donna, I'll check on it">>
@@.option-button;[[Get inside|BSDInside]]@@
<<set $SheriffLetter1 = 0>><<set $MarinaLetterRead1 = 1>><<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsdreception.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Read the letter in your office")>>
The letter arrives folded neatly inside a plain envelope on your desk. With just your title scrawled in firm, deliberate handwriting:
To the Sheriff of Bason.
<div class="styled-line"></div>
Sheriff,
I don’t know who else to turn to. I’ve seen what you did in the newspaper, how you put that monster in prison, and I believe you’re not like the others.
Please. If you care about justice… if you care about the truth… meet me at the West Mall food court, in the back corner near the . I’ll be there THIS Saturday, at 8:00 PM.
Come alone. And please… don’t tell anyone.
Sincerely,
<div class="styled-line"></div>
@@.option-button;[[Put the letter down|SheriffOffice]]@@
<<nobr>><<for _i to 0; _i lt 1000; _i++>>
<<if $MarinaMeetUp gte $now>>
<<break>>
<</if>>
<<set $MarinaMeetUp to setup.changeDate($MarinaMeetUp, 'weeks', 1)>>
<</for>><</nobr>>
<<set $MarinaLetterRead1 = 0>><<set $MarinaRestaurantMeet = 1>><<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "You have to go to the restaurant in the mall. Time: " + formatGameDateTime($MarinaMeetUp))>>
<img src="img/character/marina/marinameet1.webp" width=100%>
You walk into the restaurant, taking a slow look around, careful. Then you see her. Blonde woman, sitting alone at a corner booth, hands wrapped around a half-empty cup. She’s waiting. The moment your boots hit the tile, her eyes flick up. Just a glance. Just long enough for you to know she’s the one who wrote the letter.
You don’t approach directly. Instead, you take the booth right behind hers, sliding into the seat so that your backs are nearly touching, close enough to speak, not close enough to be seen together. Then, from just behind your shoulder, her voice, barely above a whisper.
<<dialogue "img/character/marina/marinaavatar.jpg" "???" "You really came, I didn’t know if you would">>
You lean forward slightly, eyes on the table, ears open to every movement around you.
<<dialogue $playerAvatar "You" "I’m here">>
@@.option-button;[[Tell me your story|MarinaMeetUp2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/restaurant.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "My name’s Marina. I… I work. You know the kind of work">>
You don’t say anything. Just listen. Her voice is tight, like every word costs her something.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "About nine months ago, I got booked by a man named Jack McMahon">>
That name hits hard. You know it well. Jack McMahon, the arms dealer. Not someone you casually cross.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "He was charming at first. Smooth talker. Rich. Didn’t ask for much, just company. Treated me nice. Said I reminded him of his wife—his late wife. After a while, he started asking for me more and more. Booked me three, four nights a week. Then one day, he just told me not to leave. Said I should move in with him. That he’d take care of me">>
<<dialogue $playerAvatar "You" "What's the problem?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "I was stupid. I thought it’d be better. At first… it wasn’t so bad. He gave me nice things. Talked sweet. But slowly, he changed. He started making me dress like her. His wife. Talk like her. Wear her perfume. Sit in her chair. Say the things she used to say. He told me I was her now. And when I didn’t get it right—he’d hit me">>
<<dialogue $playerAvatar "You" "Why don't you just leave him and run away?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "He keeps me locked up in that house, Sheriff. Like a doll he can wind up and play pretend with. He only let me out because I’ve been acting like his perfect wife these past two weeks. I can’t run. He’d find me. But I can’t stay, either. I thought… if anyone in this town could help me, it’d be you. Will you?">>
@@.option-button;[[Think|MarinaMeetUp3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/restaurant.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You sit in silence for a moment, the hum of the food court washing around you. You don’t turn around. Just speak low, calm, clear.
<<dialogue $playerAvatar "You" "I’m not gonna lie to you, Marina. If what you’re telling me is true, then Jack’s not just dangerous—He’s psychotic.. If you run, I can get you money, $MCMoney dollars. A train ticket. Get you as far from Bason as possible. But I can’t guarantee he won’t find you. Men like McMahon… they have eyes, connections. He’ll tear up half the damn country looking for you, and if he catches you, he won’t let you go again">>
There’s a stillness behind you. You can feel her fear even through the silence.
<<dialogue $playerAvatar "You" "Option two… You stay. Play the part. Do everything he tells you. Make him believe you’re his perfect little replacement. But while you’re inside, you can help me gather what I need, something like locations, deals, names, drop-offs. Anything that can tie him to the arms trade. You help me put him away for good. You’ll be free">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "…If I run, I’m just gonna keep running...forever. Then I’ll stay. I’ll do it. I’ll make him believe I’m everything he wants. I trust you Sheriff.">>
<<dialogue $playerAvatar "You" "I won't let you down. Don't do anything suspicious for now, you will hear from me soon">>
@@.option-button;[[Leave|Mall]]@@
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $now to setup.changeDate($now, 'hours', 4)>>
<<set $GunStoreCheck1 = 1>><<set $MarinaRestaurantMeet = 0>><<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/restaurant.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go check the gun store in Northside")>>
<<run addContact("Marina Harris", "img/character/marina/marinaavatar.jpg", "555-2348", "", "CallingMarina")>>
<<run setup.showNotification("Added Marina to your contact")>><<if $GymVoyeurCaught == 0>>
<<goto "GymVoyeurCaught1">>
<<elseif $GymVoyeurCaught == 1>>
<<goto "GymVoyeurCaught2">>
<<else>>
<<goto "GymVoyeurCaught3">>
<</if>>
<div class="location-banner">Gun Store</div>
<<setPassageVariableNoMap>>
<<dialogue "img/character/others/gunstoreclerkavatar.png" "Clerk" "Welcome, find anything you like on the shelves?">>
@@.option-button;[[Buy Armours]]@@
@@.option-button;[[Buy Guns]] @@
@@.option-button;[[Buy Grenades]] @@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/gunstore/gunstorefront.jpg][Gun Store]]>><</button>>
<div class="location-name"><b>Gun Store</b></div>
</td>
</tr>
</table><</nobr>>
<<if $GunStoreCheck1 == 1>><<goto "GunStore Check 1">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gunstore/gunstore.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/david/david.png" "David" "Hell of a job, sir. Couldn’t have done it without you">>
<<dialogue $playerAvatar "You" "Same to you. You kept this case on track">>
<<dialogue "img/character/david/david.png" "David" "My wife’s been talking about meeting you. We’re having dinner at my place tonight—steak on the grill, maybe open a bottle of wine. What do you say?">>
<<dialogue $playerAvatar "You" "I’ll be there">>
<<dialogue "img/character/david/david.png" "David" "Great. I’ll tell her to set an extra plate">>
@@.option-button;[[Wait till after shift|DavidDinner2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You left the station alongside David, the late afternoon sun stretching long shadows across the pavement. The air still carried the faint hum of the day’s work, but David seemed lighter now, almost energized.
His car ride was filled with casual conversation—small anecdotes about past cases, a bit about the neighborhood you were heading into. Soon, you pulled up to a modest but well-kept house with a small porch and a tidy yard. David stepped out first, calling toward the front door as he led you up the walkway.
<<dialogue "img/character/david/david.png" "David" "Honey, we’re here!">>
<<dialogue $playerAvatar "You" "Same to you. You kept this case on track">>
The door opened, and a woman in her early thirties appeared—warm smile, dark hair pulled into a loose bun, wearing a simple apron dusted with flour.
<img src="img/character/marlene/marlene1.jpg" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/character/david/david.png" "David" "This is my wife, Marlene. Marlene, this is the Sheriff">>
<<dialogue $playerAvatar "You" "Nice to meet you">>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "David’s told me plenty. Mostly good things">>
<<dialogue "img/character/david/david.png" "David" "Mostly">>
She stepped back to let you in, the scent of something savory drifting from the kitchen.
@@.option-button;[[Dine|DavidDinner3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/davidhouse/davidlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The evening moved along easily, laughter and conversation flowing over plates of roasted chicken, seasoned vegetables, and fresh bread. David was in his element—telling old precinct stories, ribbing you about your first days on the job, and tossing affectionate jabs at Marlene that she met with quick-witted retorts.
<<dialogue $playerAvatar "You" "What you do for a living, Ms Hamlin?">>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Oh, the sheriff is interested in my profession, honey">>
<<dialogue "img/character/david/david.png" "David" "She’s a journalist with The Daily Horizon, sir">>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "I wrote the article about Lannigan's case">>
<<dialogue $playerAvatar "You" "Oh, my case">>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Yes, and I must say—you’ve gained a fan because of it. If this were Morgan, the case would already be buried under a pile on his desk. I can’t even remember the last time I wrote an article about the oldman. Ha ha">>
David excused himself, patting his stomach and announce.
<<dialogue "img/character/david/david.png" "David" "Excuse me, bathroom break—don’t talk too much while I’m gone">>
He disappeared down the hall, leaving you and Marlene alone at the table. For a moment, she simply sipped her wine, her eyes lingering on you a little longer than before. Then, you felt commotion under the table. Marlene has slid her feet into the space between your legs. fonding it.
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "You know…David’s lucky to have a friend like you. Most people in this town wouldn’t bother sticking their necks out for anyone">>
Her gaze held yours now, more intent, the corners of her lips curving into something that wasn’t just gratitude. She tilted her head, her expression playful yet suggestive.
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "I can see why he talks about you so much">>
Marlene slides off her high heels and pulls her white thigh-high stockings down, revealing her bare feet You felt her feet rubbing more and more intensely.
<<dialogue $playerAvatar "You" "We can't do this to David">>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Oh yes, we can">>
Marlene unzip your pant, your hard cock sprung out like a spring mattress.
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Mmm, you're so big and hard... I love playing with you like this">>
Marlene keeps massaging your cock with her foot, moving her toes along the shaft and circling the head.
<img src="img/character/marlene/marlenefootjob.webp" width=100%>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Does this feel good, baby? Am I using my feet just right? I bet you'd love to have my mouth on you instead, wouldn't you? But feet are fun too, right?">>
She slips her other foot onto your balls, gently rolling them between her toes. Then she starts to stroke your cock more firmly with her foot, pumping up and down the length of it.
Before you could retort, you cum all under the dining table.
Just as Marlene attempts to jump onto you, you hear the sound of running water from down the hall—David come back in time to save you.
<<dialogue "img/character/david/david.png" "David" "Hope you two didn’t start solving another case without me">>
You managed a small chuckle, letting the moment slip away as if it had never happened. When the plates were cleared and the night wound down, you thanked them both for the meal. Marlene still looks at you with her thirsty eyes.
You stepped out into the cool night air, the quiet streets of Bason stretching ahead.
@@.option-button;[[Leave|DavidDinner4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/davidhouse/daviddiningroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You found Selena at her desk, still hunched over a stack of reports even though the case was closed.
<<dialogue $playerAvatar "You" "Guess congratulations are in order, couldn’t have wrapped it up without you">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Without you? Please. Without me, you’d still be staring at that evidence board like it was some kind of magic puzzle">>
<<dialogue $playerAvatar "You" "Always so humble">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Tell you what. There’s a little bar down on West Street. See you there after shift">>
<<dialogue $playerAvatar "You" "That’s generous of you">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Call it an invitation. But don’t keep me waiting">>
@@.option-button;[[Go to the Bar|SelenaBar2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You pushed open the door to Salt’s bar, the hum of voices, laughter, and clinking glasses washing over you. The place was alive tonight—every table full, music playing low beneath the roar of the crowd. The air carried the thick scent of whiskey, fried food, and old wood soaked with years of smoke.
<img src="img/character/selena/selenaatbar.jpg" width=60% style="display: block; margin: 0 auto;">
It didn’t take long to spot Selena. Even in the chaos, she stood out—perched confidently on a barstool, one elbow braced on the counter, tossing her hair back as she laughed at something Salt said.
Salt noticed you first. He gave you a subtle nod from behind the counter. Selena, though, didn’t turn until she felt your presence at her back. When she did, her grin widened into that cocky smirk she wore so well.
<<dialogue "img/character/selena/selenaavatar1.jpg" "Selena" "You actually come, I was starting to think you were scared">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Scared of you? Can’t say I’d blame him">>
@@.option-button;[[Sit Down|SelenaBar3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You slid onto the stool beside her, and Salt poured you a glass without asking—he knew your drink by now. Selena tapped her glass against yours, her smirk never fading. The two of you drank and talked as the hours bled away. She teased you relentlessly, testing your patience with that cocky edge, while you gave as good as you got.
By the time midnight rolled around, the bar had settled into a low hum. Selena drained the last of her glass, setting it down with a soft clink. She gave you one last look, that familiar spark dancing in her eyes.
<<dialogue $playerAvatar "You" "So, you’ve got that air about you. Like this town is yours. What’s your story, Selena?">>
For a moment, she looked like she might brush it off. Then she took a long pull from her glass, set it down, and shrugged.
<<dialogue "img/character/selena/selenaavatar1.jpg" "Selena" "My family’s been in Bason longer than half the bricks in this place. Farmers, mostly. Dirt under their nails, sun on their backs, year after year. They raised me right here, same house, same fields. I was supposed to stay and do the same, but…Turns out, I had a problem with authority. Which is ironic, seeing as I wear the badge now">>
<<dialogue $playerAvatar "You" "Farm girl turned cop. That’s a jump">>
<<dialogue "img/character/selena/selenaavatar1.jpg" "Selena" "Ok, dude, try not to get yourself killed before our next drink">>
<<dialogue $playerAvatar "You" "Same goes for you">>
She gave a small wave over her shoulder as she pushed through the crowd and out into the night.
@@.option-button;[[Leave|SaltBar]]@@
<<set $now to setup.changeDate($now, 'hours', 5)>>
<<set $SelenaBar1 = 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Selena", "You have reached the end of this update")>>
You caught Riley at her desk, papers stacked in messy piles, a half-empty coffee cup balanced dangerously close to the edge. She looked up as you approached, her eyes lighting up like she hadn’t been grinding through reports all day.
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Sheriff! I just wanted to say… I really admire the way you handled that case. Honestly, I’ve never seen anyone piece things together like that">>
<<dialogue $playerAvatar "You" "I'm flattered">>
You gave her a nod, trying to deflect the praise, but Riley wasn’t letting up. She leaned forward, lowering her voice.
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "I know I’m just the rookie around here, but working with you… it makes me want to be better. To really prove myself, you know?">>
<<dialogue $playerAvatar "You" "Thank you">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Um… I don’t usually do this, but… would you maybe like to come by my place after work? I’d love to hear more about how you… well, how you do what you do">>
<<dialogue $playerAvatar "You" "Sure">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Here's the address!">>
@@.option-button;[[Go to Riley's house|RileyHouse2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "Sheriff... I know this isn't exactly how it were supposed to go, but... I couldn't help myself. Seeing you all..., it just brought out something in me">>
<<dialogue $playerAvatar "You" "Riley?">>
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "Please, come join me. See something you like, sir? I'm all yours, if you want me...">>
You answer her with a subtle nod, joy fill Riley eyes. As you lay back on the bed, Riley's gaze immediately drops to the bulge in your pants, her pupils dilating with desire. With nimble fingers, she quickly works the zipper down, freeing your erect cock from its confines.
<<dialogue "img/character/riley/rileysexavatar2.jpg" "Riley" "Oh, wow...You're so big and beautiful, sheriff...">>
<img src="img/character/riley/rileyblowjob1.webp" width=100%>
<<dialogue "img/character/riley/rileysexavatar3.jpg" "Riley" "Mmmph...">>
Riley's mouth engulfs your thick cock, her cheeks hollowing as she sucks you deeper. Her tongue dances along the underside, tracing the prominent vein before dipping into the slit to lap up more of your salty essence.
Movements become more enthusiastic as she settles into a rhythm, bobbing her head and taking you further with each stroke. Soft, wet sounds fill the room, punctuated by her occasional hum of pleasure.
One hand cradles your balls, gently rolling them as the other reaches up to fondle your chest, stroking your pecs and tweaking your nipples. The dual sensations of her skilled oral ministrations and tactile caresses threaten to overwhelm you with bliss.
@@.option-button;[[Put the glasses on her|RileyHouse4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileybedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You pushed open the glass door of Ammu-Nation. The smell of gun oil and metal hit instantly, heavy and sterile, like a mix of machinery and disinfectant. Rows of rifles lined the wall behind the counter, handguns neatly displayed in glass cases below. Posters of hunting trips, tactical gear, and shooting range advertisements plastered the wood-paneled walls.
Behind the counter stood a man in his late forties—broad shoulders, graying beard, a faded flannel rolled up to his elbows. His eyes tracked you the second you walked in, sharp and assessing, the kind of look that weighed every detail about a person.
<<dialogue "img/character/others/gunstoreclerkavatar.png" "Clerk" "Hi there, looking for something specific, or just browsing?">>
<<dialogue $playerAvatar "You" "Just checking the place out">>
You moved along the aisles of polished steel and matte black finishes of rifles, shotguns, and handguns. Most were standard issue—civilian-legal, nothing you couldn’t find in any licensed shop.
But then your eyes landed on one that didn’t belong.
An FN SCAR-H, modified with a short barrel and suppressor threads. Military-grade. Illigal to sale and use across 51 states.
<<dialogue $playerAvatar "You" "Interesting">>
@@.option-button;[[Check the guns price|GunStore Check 2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gunstore/gunstore.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Oh, a Glock 19, two grand!">>
A basic Remington hunting rifle, close to five. Even a cheap revolver sat at nearly triple its worth. By the time you reached the counter, it was clear: everything in this place was five times over the standard market price.
<<dialogue $playerAvatar "You" "These numbers... You serious with this? In the States, that’d go for a fraction">>
The clerk didn’t blink. Instead, his lips twitched into a thin smile.
<<dialogue "img/character/others/gunstoreclerkavatar.png" "Clerk" "I don't answer questions, Sheriff">>
You kept your expression neutral, knowing you are not getting any more info here. You need to talk to the mayor about this before making any move.
@@.option-button;[[Leave|Gun Store]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $GunStoreCheck1 = 0>><<run hideSidebar()>>
<<set $MayorTalk1 = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gunstore/gunstore.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Meet the mayor")>>
<h2>Grenade Box</h2><img src="img/item/grenadebox.png" width =100%>
<p><strong>Price:</strong> $10,000</p>
<p><strong>Full Description:</strong> Used to upgrade BSD</p>
<<nobr>><<if $MCMoney >= 10000>>
@@.option-button;<<link "Buy">>
<<addItem "Grenade Box" "img/item/grenadebox.png" "A box full of Grenades." "Used to upgrade BSD." "Weapon" 10000 1>><<set $MCMoney -= 10000>>
<<goto "Buy Grenades">>
<</link>>@@<<else>>
<p style="color: red; font-weight: bold;">Not enough money</p><</if>>
<</nobr>>
@@.option-button;<<link "Leave">><<goto "GunStoreInside">><</link>>@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gunstore/gunstore.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Gun Box</h2><img src="img/item/gunbox.jpg" width =100%>
<p><strong>Price:</strong> $30,000</p>
<p><strong>Full Description:</strong> Used to upgrade BSD</p>
<<nobr>><<if $MCMoney >= 30000>>
@@.option-button;<<link "Buy">>
<<addItem "Gun Box" "img/item/gunbox.jpg" "A box full of Guns." "Used to upgrade BSD." "Weapon" 30000 1>><<set $MCMoney -= 30000>>
<<goto "Buy Guns">>
<</link>>@@
<<else>>
<p style="color: red; font-weight: bold;">Not enough money</p>
<</if>><</nobr>>
@@.option-button;<<link "Leave">><<goto "GunStoreInside">><</link>>@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gunstore/gunstore.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Amour Box</h2><img src="img/item/armourbox.jpg" width =100%>
<p><strong>Price:</strong> $20,000</p>
<p><strong>Full Description:</strong> Used to upgrade BSD</p>
<<nobr>><<if $MCMoney >= 20000>>
@@.option-button;<<link "Buy">>
<<addItem "Armour Box" "img/item/armourbox.jpg" "A box full of Amours." "Used to upgrade BSD." "Weapon" 20000 1>><<set $MCMoney -= 20000>>
<<goto "Buy Armours">>
<</link>>@@
<<else>>
<p style="color: red; font-weight: bold;">Not enough money</p>
<</if>>
<</nobr>>
@@.option-button;<<link "Leave">><<goto "GunStoreInside">><</link>>@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gunstore/gunstore.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Grenade Box</h2><img src="img/item/grenadebox.png" width =100%>
<p><strong>Type:</strong> Weapon</p><p><strong>Full Description:</strong> Used to upgrade BSD.</p><<nobr>><<if not $inventory["Grenade Box"] or not $inventory["Grenade Box"].quantity>>
<p style="color: red; font-weight: bold;">No Grenade Box left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Grenade Box"].quantity>></p>
@@.option-button;<<link "Use">><<useItem "Grenade Box">><<goto "Grenade Box">><<set $BSDDefense += 1>><</link>>@@<</if>><</nobr>>
<h2>Gun Box</h2><img src="img/item/gunbox.jpg" width =100%>
<p><strong>Type:</strong> Weapon</p><p><strong>Full Description:</strong> Used to upgrade BSD.</p><<nobr>><<if not $inventory["Gun Box"] or not $inventory["Gun Box"].quantity>>
<p style="color: red; font-weight: bold;">No Gun Box left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Gun Box"].quantity>></p>
@@.option-button;<<link "Use">><<useItem "Gun Box">><<goto "Gun Box">><<set $BSDDefense += 3>><</link>>@@<</if>><</nobr>>
<h2>Amour Box</h2><img src="img/item/armourbox.jpg" width =100%>
<p><strong>Type:</strong> Weapon</p><p><strong>Full Description:</strong> Used to upgrade BSD.</p><<nobr>><<if not $inventory["Armour Box"] or not $inventory["Armour Box"].quantity>>
<p style="color: red; font-weight: bold;">No Armour Box left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Armour Box"].quantity>></p>
@@.option-button;<<link "Use">><<useItem "Armour Box">><<goto "Armour Box">><<set $BSDDefense += 2>><</link>>@@<</if>><</nobr>>
Haley sat hunched over a table near the back. Her face was pale with stress, eyes darting between pages like she was trying to drink the words too fast. When you stepped closer, she looked up—and her expression shifted into a small, tired smile.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Oh… hey, thanks for coming to the football match the other day. It… it meant a lot">>
You gave her a nod, and she leaned back in her chair, sighing dramatically.
<<dialogue $playerAvatar "You" "What are you studying?">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "I’m so dead, this exam’s gonna kill me. If I fail, Mom’s gonna lock me in my room for the rest of the year">>
<<dialogue $playerAvatar "You" "Maybe I can help">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Help me study? But it's too late">>
<<dialogue $playerAvatar "You" "No, better">>
She tilted her head, confused, but you didn’t explain yet. Instead, you watched her fidget with her pen, desperation clear in her eyes.
<<dialogue $playerAvatar "You" "I’ve got a way">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Wait… are you saying what I think you’re saying?">>
<<dialogue $playerAvatar "You" "If you want to pass, I can make sure you get the paper before the test. But once you’ve got it, that’s on you">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "…You’d really do that? For me?">>
@@.option-button;[[Yes|HaleyTalk2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/library/library.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Yes, I’ll get it for you">>
Haley’s eyes widened, her lips parting in disbelief. You didn’t give her time to second-guess it.
<<dialogue $playerAvatar "You" "Tonight I’ll bring the exam paper straight to your room. All I need from you is the details—subject, teacher, what test we’re talking about. You give me that, and the rest is on me">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "It’s science. Mrs. Cory. I think it's in the cabinet under the teacher table">>
<<dialogue $playerAvatar "You" "You’ll have it. I’ll knock on your window when it’s done">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "…Thank you">>
@@.option-button;[[Leave|Library]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $HaleyTalk1 = 0>><<run hideSidebar()>>
<<set $HaleyExamSteal = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/library/library.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Haley", "Steal the exam paper in the Science classroom at night, need lockpick")>>
<div class="location-banner">University</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/university/footballfield.png][Football field]]>><</button>>
<div class="location-name"><b>Football field</b></div>
</td>
<td>
<<button [img[img/location/university/universityhallway.png][University Hallway]]>><</button>>
<div class="location-name"><b>Hallway</b></div>
</td>
<td>
<<button [img[img/location/university/university.png][University]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/university.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The lock gave after a minute of coaxing, the old cabinet protesting softly as you worked it open. Empty. No exam paper.
<<dialogue $playerAvatar "You" "Haley, Haley...">>
You frowned, scanning the shelves again, just dusty folders, outdated assignments, and a bottle of chalk. Nothing useful. Then suddenly you hear footsteps.
You killed your flashlight and slid into the shadows, your breath tight in your chest.
Two figures slipped into the classroom across the hall. You recognized one immediately, Cory, the science teacher. The same subject Haley had been whining about all day. The other was a man you didn’t know, taller, broad shoulders.
You leaned just enough to see through the crack of the doorway. Cory pressed herself against the man, kissing him.
Maybe the paper wasn’t where you thought it’d be. Maybe it was in Cory’s hands—or in the wrong ones entirely.
<img src="img/character/cory/corycunnilingus.webp" width=70% style="display: block; margin: 0 auto;">
Then you see them get in the act, the man is giving Cory a cunnilingus. and there's no harm in recording it.
@@.option-button;[[Follow Cory home|CoryTalk1]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/scienceclass.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.3) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You waited until they were done. The man left first, slipping out through the back door of the school, his collar tugged straight, his steps quick. Cory lingered, gathering herself, fixing her blouse in the dim light before she slipped into the night.
You kept your distance, trailing her through the quiet streets until she reached her small house on the edge of town. She fumbled with her keys, stepped inside, and lit a lamp. You gave it a minute, then knocked.
<img src="img/character/cory/coryathome.jpg" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/character/cory/coryavatar.jpg" "Cory" "Sheriff? What… what are you doing here?">>
<<dialogue $playerAvatar "You" "I saw you tonight, Cory, at the school">>
You stepped inside without waiting for an invitation. She backed up a few steps, arms wrapping around herself. Color drained from her face. She shook her head, already trembling.
<<dialogue "img/character/cory/coryavatar.jpg" "Cory" "Please, you can’t tell anyone. If the board finds out, if the parents know I’ll lose everything. My job, my reputation. Please, Sheriff, I’m begging you, I made a mistake, I swear, it won’t happen again. Just… don’t ruin me. Don’t tell anyone">>
<<dialogue $playerAvatar "You" "I can keep quiet, nobody has to know what I saw tonight. Not the board, not the parents, not anyone. But if I do that for you… then you’ll do what I tell you. Anything I say">>
<<dialogue "img/character/cory/coryavatar.jpg" "Cory" "What.. what do you want from me?">>
@@.option-button;[[Fuck Cory from behind|CorySex1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/coryhouse/coryroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "He sure did warm you up good">>
<<dialogue "img/character/cory/corysexavatar2.jpg" "Cory" "W-wait, what are you... ohhh...">>
Cory gasps as she feels your hard cock pressing against her from behind,
<img src="img/character/cory/corydoggy.webp" width=100%>
<<dialogue "img/character/cory/corysexavatar2.jpg" "Cory" "Mmm, please... stop...">>
Cory moans softly as you rub her clit as your cock plunge into her pussy, your other hand squeezing a perky breast. You start thrusting her hips faster, panting lightly as arousal builds.
<<dialogue "img/character/cory/corysexavatar3.jpg" "Cory" "Oh fuck, I'm getting close... I'm cumming...">>
But you keep going, she lets out a soft moan as your movements become more rhythmic, feeling her body start to respond to the sensation of being filled. Cory begins to move her hips in sync with your thrusts, her ass clenching around your cock.
<<dialogue "img/character/cory/corysexavatar1.jpg" "Cory" "No, please stop, I just came, let me rest a bit">>
her moans grow louder and more urgent as she gets lost in the pleasure, her pussy starting to tingle with another impending orgasm
@@.option-button;[[Cum|CoryTalk2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/coryhouse/coryroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You wait for Cory to gather herself.
<<dialogue $playerAvatar "You" "There's one more favor I need from you, I want the exam paper for tomorrow’s science test">>
<<dialogue "img/character/cory/coryavatar.jpg" "Cory" "The exam paper? Why?">>
<<dialogue $playerAvatar "You" "Don’t ask questions. Just do it">>
Her shoulders sagged, the fight draining from her. After a long silence, she gave a reluctant nod.
<<dialogue "img/character/cory/coryavatar.jpg" "Cory" "…Fine. I’ll get you the exam paper">>
Cory moved toward a small drawer by her desk. Her hands shook as she unlocked it, rifled through a stack of folders, and finally pulled out a sealed envelope. She held it tight, her knuckles pale, before extending it to you.
<<dialogue $playerAvatar "You" "You never saw me tonight, and I never saw you at the school">>
<<dialogue "img/character/cory/coryavatar.jpg" "Cory" "I… I understand">>
@@.option-button;[[Leave|CoryTalk4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/coryhouse/coryroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<h2>Assassin Table</h2><img src="img/item/assassintable.png" width =70%>
<p><strong>Type:</strong> furniture</p><p><strong>Full Description:</strong> A gun hidden inside a table.</p>
<img src="img/character/haley/haleytease1.webp" width=100%>
From the window, you can see into Haley's room. Inside, Haley stands in front of the mirror, wearing only her top. You enjoyed the view for some time, then picking up a pebble, you tapped it against the glass. Haley comes to the window, startled before realizing it's you..
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Jesus, you scared me">>
<<dialogue $playerAvatar "You" "May I come in?">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Sure">>
<<dialogue $playerAvatar "You" "Got what you asked for">>
You nodded once. Haley hugs you, her bare tits press against you, excitement bubbling in her voice.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Thank you. Thank you. Thank you">>
<<dialogue $playerAvatar "You" "Where are your parents?">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "They’re working late. They won’t be back until morning">>
@@.option-button;[[Lean in to kiss her|HaleyTalk4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/carriehouse/haleyroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The sudden chime of the doorbell cut through the quiet.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "You have to go, now, please">>
Instead of leaving, you stepped back into the shadows of her room. From your hiding spot, you heard the creak of the front door opening.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Gareth! Come in">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "Didn’t think your folks would be out this late">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "They’re not. But it doesn’t matter. You know me—I always find a way around things">>
Their footsteps echoed into the living room. You edged closer, listening.
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "So, what’ve you been up to?">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Oh, you’re gonna love this. I’ve been making the new sheriff do all sorts of stuff for me. Like tonight, he actually got me the science exam">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "That’s wild. You really had the sheriff running around for you? Damn, babe, you’re dangerous">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Nope. Actually, it's the opposite, I just acted helpless, batted my eyes a little. He fall for it hard">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "If I ever catch him sniffin’ around you, I’ll put him in his place. I don’t care if he’s got that badge, don’t mean a thing to me">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Relax, he’s nothing compared to you. You’re the one I really want. He’s just… convenient">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "That’s my girl">>
@@.option-button;[[Wait|HaleyTalk5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/carriehouse/carrielivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Good day, sir">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Well, this is unexpected. What brings you here?">>
<<dialogue $playerAvatar "You" "I’ve made up my mind. I'm going after Jack McMahon">>
The mayor goes still, his pen frozen midair. Then, slowly, he sets it down and leans back in his chair.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "Jack McMahon, the arms dealer. That’s no small choice you’ve made">>
<<dialogue $playerAvatar "You" "I'll take my chance">>
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "There some info I can give you, McMahon’s feud with the bike riders nearly drowned this town in blood. Gun trucks hijacking on the highways, the abandoned mine turns into a shooting range daily. It was hell until Don Fadda forced a ceasefire five months back. But don’t think that truce runs deep. Maybe you can use this to stir things up">>
The mayor pulls open a drawer, retrieving a folder, and lays it on the desk without sliding it across. His hand rests on it like a weight.
<<dialogue "img/character/kevin/kevinavatar.png" "The Mayor" "He also keeps all his money in the bank. It’s arrogance. Dangerous arrogance. That, and his supply lines, are the only cracks I see. You’ve chosen the right path. I'd thought you were going after Fadda after taking down one of his made men, Fabrizio, thinking this an easy job. But still, Good luck. You’ll need it">>
<<dialogue $playerAvatar "You" "Thanks, I'll be right back to work">>
@@.option-button;[[Leave|Mayor Office]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $MayorTalk1 = 0>><<run hideSidebar()>>
<<set $McMahonPlan1 = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townhall/mayoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Set up a plan in your office")>>
You sit alone in the sheriff’s chair, the hum of the old desk lamp the only sound in the room. Its pale light spills across a clutter of maps, files, and case notes.
For hours, you’ve been circling the same thoughts, chasing angles that never quite line up. The map of Bason lies open before you, veins of roads and highways stretching like scars across the paper. You drag a finger along Route 13, then down toward the southern backroads, tracing possibilities, exits, traps. Then finally, the plan is done, dangerous, maybe impossible, but it’s the only way forward.
The plan takes shape in steps:
Hijack a truck. Make it look like the bikers pulled it off—sloppy, aggressive, loud. The ceasefire Don Fadda brokered won’t survive the hit.
Once suspicion falls on the bikers, McMahon will lash out. Money wons wars but not without manpower.
McMahon doesn't have the manpower to fight the nikers, so he's either made a deal with Fadda or he's going to buy craploads of mercenaries with his money, and he definitely doesn't want to owe Fadda a favor. That is when we hit the bank, where McMahon keeps his fortune stacked. He does not store his wealth directly in his vault. That means he trusts the bank more than his underling, which tells you just how paranoid he is. So getting at least one of them to your side is not entirely impossible.
Expose the cracks. Marina. She’s the key to McMahon's demise. With her help, you can keep McMahon in the dark for 24 hours.
@@.option-button;[[Call Marina|MarinaCall0]]@@
<<set $now to setup.changeDate($now, 'hours', 5)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>It rings once. Twice. Then a click.
<<dialogue $playerAvatar "You" "Delivery pizza for Keya West">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "What?">>
<<dialogue $playerAvatar "You" "Who is it?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "...Me, Marina Harris">>
You lean back in the chair, lowering your voice.
<<dialogue $playerAvatar "You" "It's me, sheriff. just want to make sure it's you">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Sheriff, Jack is out of the house for now">>
<<dialogue $playerAvatar "You" "I need information, Marina. I need to know about McMahon’s gun supplies—when they move, where do they go? You’re close enough to hear things no one else can">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "You don’t understand what he’ll do to me if he finds out">>
<<dialogue $playerAvatar "You" "I do. That’s why I’m asking. You want out, don’t you? This is how it starts. Get me that information, and you’re already halfway free of him">>
Another pause. Then her tone shifts, quieter, almost trembling but sharp enough to cut through the static.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "I’ll try. When I hear something, I’ll call you back. But this… this better not get me killed or worse">>
You let a thin smile cross your face, though no one’s around to see it.
<<dialogue $playerAvatar "You" "It won’t. Just do your part, and he will never know">>
@@.option-button;[[Hang up|SheriffOffice]]@@
<<set $MarinaCall1Time to setup.changeDate($now, 'days', 3)>>
<<set $MarinaCall1 = 1>>
<<set $DavidInvestigate1 = 1>>
<<set $McMahonPlan1 = 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Wait till Marina call you back. Time: " + formatGameDateTime($MarinaCall1Time))>>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "I’ve got what you wanted">>
It's Marina. Her voice is hushed, like she’s calling from a corner with one hand covering the receiver. You sit forward in your chair, grabbing a pen, pulling the nearest scrap of paper closer.
<<dialogue $playerAvatar "You" "Talk to me, Marina">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "There’s a truck rolling in one week from today. Route’s through Route 13, straight into town. They’ll cut through the apartment to avoid checkpoints. Jack thinks no one’s watching there">>
<<dialogue $playerAvatar "You" "Did Jack mention how many men would be with the truck?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Six men, maybe more">>
<<dialogue $playerAvatar "You" "And the timeline?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "They leave the depot at ten sharp. Should hit the edge of town a little after midnight. If you’re going to make a move… that’s your window. There's not going to be any other trucks coming in a month">>
You lower your voice, calm but firm.
<<dialogue $playerAvatar "You" "Thank you. You’ve done your part. When this is over, you’ll be free of him">>
The plan’s no longer theory. It’s a countdown.
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@
<<set $McMahonHijack1 to setup.changeDate($now, 'days', 7)>>
<<set $MarinaCall1 = 0>><<run hideSidebar()>>
<div class="dialogue-box">
<img src="img/avatar/dev_avatar.png" class="dialogue-avatar" alt="Dev">
<div class="dialogue-content">
<div class="dialogue-speaker">Dev</div>
<div class="dialogue-text">This is important. Date and time of the hijack: $McMahonHijack1 </div>
</div>
</div>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Ask David to investigate McMahon's crew")>>
From a hidden spot, you can see a figure. And there she was.
Rissa is barefoot, naked, holding a dildo. She doesn’t notice you. She doesn’t seem to notice anything. She’s just strolling through the empty warehouse like she owns the place. Learning nothing from the previous encounter with you.
<img src="img/character/rissa/rissarunning.webp" width=100%>
@@.option-button;[[Wait|Rissa4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>She walks to the center of the warehouse floor, drops to her knees, and starts touching herself; she's masturbating. You shift slightly for a better view and spot her thrusting the dildo into her pussy.
<img src="img/character/rissa/rissamasturbate.webp" width=100%>
She's moaning harder and harder with each thrust until the floor around her becomes a puddle of her love juice.
@@.option-button;[[Reveal yourself|Rissa5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>But tonight you didn’t stay hidden. Tonight you stepped forward.
<<dialogue $playerAvatar "You" "Working late again, Rissa?">>
The sound of your voice cracked through the stillness. She froze mid-step, shoulders tensing before she turned. Her eyes locked on you, sharp and calculating, but not surprised. Not entirely.
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "Well, sheriff. I know there's no way I can convince you to delete the video, so fuck it. Just give me your cock. Fuck me right here in the warehouse">>
<<dialogue $playerAvatar "You" "You amaze me, Rissa">>
You took another step closer, grabbing Rissa's juicy tits.
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "Come on, sheriff">>
Her lips curled into something between a smirk and a snarl.
@@.option-button;[[Fuck Rissa|RissaSex1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Rissa cries out sharply as you begin thrusting into her, the sudden motion sending waves of intense pleasure coursing through her body.
<<dialogue "img/character/rissa/rissasexavatar3.jpg" "Rissa" "Ahhhn, oh fuck yes! Your cock feels so big inside me!">>
<img src="img/character/rissa/rissamissionary.webp" width=100%>
Rissa's eyes roll back, and she lets out a soft scream as you fuck her harder and harder.
<<dialogue "img/character/rissa/rissasexavatar3.jpg" "Rissa" "Mmmph, harder! Fuck me harder">>
Rissa screams in ecstasy as your relentless pounding sends her hurtling towards a shattering orgasm.
<<dialogue "img/character/rissa/rissasexavatar3.jpg" "Rissa" "YES, OH GOD YES! FUCK ME, MAKE ME CUM!">>
Her body writhes beneath you, breasts bouncing wildly with each savage thrust. Rissa's pussy spasms and clenches, milking your cock for all it's worth as she teeters on the brink of release.
Rissa yelps in surprise as you suddenly spins her around, her round ass presented invitingly.
<<dialogue "img/character/rissa/rissasexavatar1.jpg" "Rissa" "Ooh, what are you doing, you naughty man?!">>
Before she can react further, your palm cracks against her plump cheek, sending a jolt of pleasure-pain through her. Rissa moans in pleasure.
<img src="img/character/rissa/rissadoggy.webp" width=100%>
Screams in agonizing bliss as you shift your focus to her ass, the thick head of your cock battering relentlessly against her tender rosebud.
<<dialogue "img/character/rissa/rissasexavatar1.jpg" "Rissa" "OH MY GOD, RIGHT THERE! POUND MY ASS, YOU DIRTY PERVERT!">>
With a final, brutal slam of your hips, you bury yourself to the hilt inside Rissa's convulsing cunt, triggering her explosive orgasm.
<<dialogue $playerAvatar "You" "I'm about to cum, Rissa">>
<<dialogue "img/character/rissa/rissasexavatar1.jpg" "Rissa" "Please give it to me. Please...please">>
You pull your cock out of her pussy, Rissa wraps her small hand around your cock, feeling it twitch and respond to her touch. She begins pumping her fist along the length of his cock, her thumb rubbing circles around the sensitive head.
<<dialogue "img/character/rissa/rissasexavatar2.jpg" "Rissa" "Cumming">>
<img src="img/character/rissa/rissacumonbelly.webp" width=100%>
As your seed erupts across Rissa's flat stomach, painting her pale skin with streaks of white, she giggles and wipes some of the sticky fluid onto her tongue for a taste.
@@.option-button;[[Finish|RissaBackgroundChat]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Rissa leaned back against the crate, her arms crossed tight. Her eyes hardened, you offer Rissa a beer after the wild sex, and you two walk about all sorts of stuff, but when you brought up family, the mask cracked.
<<dialogue $playerAvatar "You" "What about family?Anyone waiting for you at home?">>
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "My brother. Greg. Stubborn idiot. He… he’s been running with some people lately. A crew, I think. Got me this job at the warehouse. I don’t even know who. He doesn’t tell me much">>
<<dialogue $playerAvatar "You" "I know who he’s running with">>
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "You do?">>
<<dialogue $playerAvatar "You" "Greg May is working under Jack McMahon">>
The name meant nothing to her—you could see it in the way she frowned.
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "Who’s that supposed to be?">>
<<dialogue $playerAvatar "You" "Jack McMahon’s not some two-bit hustler. He’s one of the biggest gun suppliers in this state. He arms gangs, cartels, mercs—anyone with cash. And your brother is tangled up in his web">>
Her face went pale. She hugged her arms tight, suddenly looking smaller than before.
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "God… no. Greg wouldn’t… he wouldn’t understand what he’s gotten himself into">>
<<dialogue $playerAvatar "You" "He doesn’t. But you do now. And I can get your brother out of this mess. But I can’t do it alone. I need you">>
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "Anything. Whatever it takes. Just… don’t let him end up on that dangerous path">>
<<dialogue $playerAvatar "You" "Greg’s loyalty to Jack runs deep. If I go at him head-on, he won’t budge. But there’s a way to make him see Jack for what he really is">>
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "How?">>
<<dialogue $playerAvatar "You" "You. If Greg thinks Jack has his eyes on you, that he’s… lusting after his own sister, Greg will turn on him. I need you to plant that seed. I’ll set the stage, images, videos, whatever it takes to make it look real inside McMahon’s lair. But Greg needs to hear the fear from you. You tell him you’re scared of Jack. That you don’t feel safe. Tell him Jack came by your house uninvited...">>
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "I understand">>
Rissa cut you off.
<<dialogue $playerAvatar "You" "It's not lie. Protect him. If he keeps working for McMahon, he’s dead. This way, he gets out alive. But I need your conviction. He has to believe it">>
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "Alright, I trust you">>
Rissa hesitated but finally agreed to be a part of this plan.
@@.option-button;[[Leave|RissaBackgroundChat1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue "img/character/david/david.png" "David" "Sheriff">>
<<dialogue $playerAvatar "You" "David, I’ve got something for you. Jack McMahon. You know the name?">>
<<dialogue "img/character/david/david.png" "David" "Yeah. Gun peddler">>
<<dialogue $playerAvatar "You" "Exactly, I want to know everything about those men—who they are, where they sleep, what they eat, who they owe money to. Weak spots. Habits. Anything we can use. Start with his closest circle and work out. You report back to me, and only me">>
<<dialogue "img/character/david/david.png" "David" "Understood. You think about building a case?">>
<<dialogue $playerAvatar "You" "Something like that, Before we can touch McMahon, we need to know who props him up">>
<<dialogue "img/character/david/david.png" "David" "I’ll get on it right away">>
With that, he grabbed his coat and headed for the door, determination in his stride.
@@.option-button;[[Back to work|SquadRoom]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<run hideSidebar()>>
<<set $DavidReportTime1 to setup.changeDate($now, 'days', 1)>>
<<set $DavidReport1 = 1>>
<<set $DavidInvestigate1 = 0>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "David will report back to you after a day. Time: " + formatGameDateTime($DavidReportTime1))>>
You were buried in paperwork when someone knocks on the door. David stepped in, a folder tucked under his arm, the sharp look in his eyes telling you he’d done his homework.
<<dialogue "img/character/david/david.png" "David" "Sheriff, I’ve got something">>
You gestured for him to sit.
<<dialogue $playerAvatar "You" "Let’s see it">>
David opened the folder and spread a few sheets across your desk.
<<dialogue "img/character/david/david.png" "David" "I've been digging into Jack McMahon’s crew. Most of the names are what you’d expect—lowlifes with records thicker than a Bible">>
You give a quick look through the files, and one catches your attention.
<<dialogue "img/character/david/david.png" "David" "Good morning, mayor">>
<<dialogue $playerAvatar "You" "Greg May. Young guy, mid-twenties. No priors until last year. Word is, Jack’s been using him as an operator. Quite a lot of responsibility for someone this young. Johny D, the store manager, I already met the guy, very talkative">>
The name snagged in your head. May. Same as Rissa. You kept your expression flat, even as the connection started forming in the back of your mind. Rissa May. Greg May.
<<dialogue $playerAvatar "You" "Good work. Keep this between us for now. I’ll handle the rest">>
<<dialogue "img/character/david/david.png" "David" "Understood, Sheriff">>
@@.option-button;[[Back to work|SheriffOffice]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<run hideSidebar()>>
<<set $DavidReport1 = 0>>
<<set $RissaBrother = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Continue with Rissa's guild")>>
<<run updateGuideTextForStoryline("Rissa", "Meet Rissa at the warehouse at night")>>
You take a step in, scanning the room. The lights are dimmer than usual, shadows stretching long across the floor. You catch the faintest reflection of a man on the beer botle. That’s all the warning you get.
Crack.
White light explodes behind your eyes. Your knees buckle, the world tilts sideways. You try to reach for your gun, but your hand won’t listen. The floor rushes up to meet you, and then everything goes black.
@@.option-button;[[Wake up|GregTalk2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/nonameroom1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/riley/rileyblowjob2.webp" width=100%>
<<run hideSidebar()>>
@@.option-button;[[Continue|RileyHouse5]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileybedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/riley/rileyblowjob3.webp" width=100%>
Without missing a beat, she resumes her fervent sucking, her mouth engulfing your thick shaft once more. Her hand continues to massage your balls, applying just the right amount of pressure to heighten your arousal.
As she bobs her head, her free hand drifts down to tease her own slick folds, circling her clit with a finger in time with the suction of her lips. The added stimulation sends ripples of pleasure through both of you, intensifying the moment.
Riley releases your spent cock with a soft pop, her lips glistening with a mixture of your precum and her own saliva. She gazes up at you, her eyes heavy-lidded and smoldering with desire, as she slowly sits up on the bed.
<<dialogue "img/character/riley/rileysexavatar3.jpg" "Riley" "Mmm, you taste incredible, sir. I could get addicted to that flavor...">>
She purrs, running her tongue over her lower lip to collect the remaining drops of fluid. Her hand slides down her stomach, fingers delving between her thighs to gather the evidence of her own arousal. She brings her slickened digits to her mouth, sucking them clean with a sultry moan.
<<dialogue "img/character/riley/rileysexavatar4.jpg" "Riley" "Looks like someone else needs attention too, though...">>
With a coy smile, Riley reclines back onto the pillows, spreading her legs invitingly as she beckons you closer.
@@.option-button;[[Fuck|RileyHouse6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileybedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>As you position yourself between her thighs, Riley's eyes flutter closed, a soft sigh escaping her lips. Her body arches subtly, pressing her heated center against your eager length.
<<dialogue "img/character/riley/rileysexavatar5.jpg" "Riley" "Yes, Sheriff... Please, fuck me. Make me yours...">>
With a gentle thrust, you slide into her welcoming warmth, eliciting a sharp intake of breath from Riley. As you begin to move, her back bows off the mattress, nails digging into your shoulders as she wraps her legs around your waist.
<img src="img/character/riley/rileymissionary.webp" width=100%>
As you increase your pace, Riley's moans grow louder, more desperate. Her head falls back, exposing the vulnerable column of her throat. In a moment of passion, you wrap your arms around her, applying a gentle yet firm chokehold.
<<dialogue "img/character/riley/rileysexavatar1.webp" "Riley" "Yes, yes, yes! Don't stop...Make me cum! Make me cum!">>
Riley cries out, her voice muffled by the grip on her neck. Her body tenses, straining against the restraint as waves of pleasure crash over her.
<<dialogue $playerAvatar "You" "Riley, I'm cumming">>
<<dialogue "img/character/riley/rileysexavatar6.jpg" "Riley" "Paint me with your cum, Sheriff!">>
Riley plead, her voice a hoarse whisper of desperation as she feels your cock pulsing within her.
<<run hideSidebar()>>
@@.option-button;[[Cum|RileyHouse7]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileybedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/riley/rileycumoutside.webp" width=100%>
You came, spraying your juice all over Riley's belly. She reaches out, tracing a finger through the cooling trails of semen, bringing it to her lips for a taste. Her eyes flutter shut in delight as the salty flavor explodes on her tongue.
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "Coming to this town was the best decision of my life">>
<<dialogue $playerAvatar "You" "Me too, girl. But I got to go now">>
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "Awe, Can't you stay?">>
<<dialogue $playerAvatar "You" "Responsible, remember?">>
@@.option-button;[[Leave|RileyHouse8]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileybedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/cory/corycum.webp" width=100%>
Cory cries out as she feels your warm seed splashing across her stomach, her own climax hitting her like a tidal wave. She shudders and gasps for air as the intense waves of pleasure course through her body.
<<dialogue "img/character/cory/corysexavatar1.jpg" "Cory" "Can't believe you just did that to me">>
@@.option-button;[[Finish|CoryTalk3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/coryhouse/coryroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/cassie/cassie.jpg" width=100%>
Full Name (Alias): Cassandra “Cassie” Lannigan
Actress's name: Josephine Jackson
Age: 35
Height: 5'7" (170 cm)
Weight: 130 lbs (59 kg)
Build: 91-66-94 cm (36-26-37),
Eye Color: Blue
Hair: Blonde, usually styled neat but with a softness that makes her approachable
Skin Tone: Fair, smooth, well-kept
Scars/Tattoos: None
Piercings: Tongue, navel
Background
Origin: Born and raised in Bason, tied to the town by both blood and business
Occupation: Owner of “Zen Massage,” a massage and wellness spa that gives her both income and influence
Family: Aunt of Rebecca Lannigan, the murdered girl. She had been more of a second mother than just an aunt, which makes Rebecca’s death a wound that won’t heal.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $CassieSexScene1 is 1>>
<<button [img[img/character/cassie/cassiedoggy1.webp][ZenMassage3]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/cassie/cassiedoggy1.webp]]
</div>
<</if>>
<b>Cassie Massage 1</b>
</td>
<td>
<<if $CassieSexScene2 is 1>>
<<button [img[img/character/cassie/cassiemassage3.webp][CassieTalk1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/cassie/cassiemassage3.webp]]
</div>
<</if>>
<b>Cassie Massage 2</b>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/selena/selena.jpg" width=100%>
Full Name (Alias): Deputy Selena Lockett
Actress's name: Skylar Snow
Age: 33
Height: 5'5" (165 cm)
Weight: 140 lbs (64 kg)
Build: 86-69-97 cm (34DD-27-38), soft curves on an average frame, natural and youthful
Eye Color: Blue – bright and expressive, often carrying a hint of longing
Hair: Blonde, usually worn loose with a casual, carefree style
Skin Tone: Fair, with a subtle sun-kissed undertone
Scars/Tattoos: Rose tattoo on her left ankle
Piercings: Navel; left nostril
Background
Origin: Born and raised in Bason, with deep family roots in the town
Occupation: Police deputy of the Bason Sheriff Department
Reputation: Fierce, uncompromising, and respected on the force. Known for her no-nonsense attitude, though she isn’t always easy to work with.
Conflict: She seems pissed about being passed over for sheriff in favor of a foreigner.
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/maria/mariapraying.png" width=100%>
Full Name (Alias): Maria Davidson
Actress's name: Crystal White
Age: 24
Height: 5'6" (167 cm)
Weight: 126 lbs (57 kg)
Build: 91-61-91 cm (36-24-36)
Eye Color: Grey – steady, calm, with a hint of steel
Hair: Red, usually tucked away under her veil
Skin Tone: Fair, unmarked
Scars/Tattoos: None
Piercings: None
Background
Origin: Bason-born, raised in a devout household
Occupation: Head nun of the Saint Morty Church, despite her young age — a position earned through discipline, intelligent, and unshakable faith
Reputation: To the townsfolk, she is seen as pious and kind, but also unyielding in her beliefs. Some find her warmth inspiring, others find her strictness suffocating.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $MariaSexScene1 is 1>>
<<button [img[img/various/churchhallucination.webp][MariaTalk1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/various/churchhallucination.webp]]
</div>
<</if>>
<b>Church visit 1</b>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/haley/haleystudent.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name (Alias): Haley Kendrick
Actress's name: Angel Youngs
Age: 20
Height: 5'6" (167 cm)
Weight: 128 lbs (58 kg)
Build: 86-64-89 cm (34-25-35),
Eye Color: Blue – bright, expressive
Hair: Blonde, often styled to stand out in a crowd
Skin Tone: Fair, youthful
Scars/Tattoos: None
Piercings: Left nostril, tongue
Background
Origin: Born in Bason, Carrie and the mayor’s daughter
Occupation: Student at Bason University; cheerleader on the university squad
Reputation: Spirited, outspoken, and stubborn, traits that fuel her daily clashes with her mother.
Relationships: Has a boyfriend named Gareth; the relationship is passionate, though not without turbulence.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $HaleySexScene1 is 1>>
<<button [img[img/character/haley/haleymasturbate1.webp][HaleyStalking1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/haley/haleymasturbate1.webp]]
</div>
<</if>>
<b>Haley Masturbating</b>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/marlene/marlene1.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name (Alias): Marlene Hamlin
Actress's name: Tori Black
Age: 32
Height: 5'8" (172 cm)
Weight: 121 lbs (55 kg)
Build: 91-69-94 cm (36-27-37)
Eye Color: Brown
Hair: Brown, worn practical but stylish, often tucked behind one ear while she’s taking notes
Skin Tone: Light with a hint of warmth from her mixed heritage
Scars/Tattoos: none
Piercings: none
Background
Origin: Bason-born, familiar with the town’s secrets and politics from a young age
Occupation: Reporter at The Daily Horizon, Bason’s local newspaper
Reputation: Relentless, curious, and ambitious.
Family: Married to David Hamlin, an deputy in the Bason Sheriff Department. Their marriage may have some issue.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $MarleneSexScene1 is 1>>
<<button [img[img/character/marlene/marlenefootjob.webp][DavidDinner1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/marlene/marlenefootjob.webp]]
</div>
<</if>>
<b>Marlene Footjob 1</b>
</td>
<<if $MarleneSexScene2 is 1>>
<<button [img[img/character/marlene/marleneblowjob.webp][MarleneAtHome1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/marlene/marleneblowjob.webp]]
</div>
<</if>>
<b>Marlene Blowjob 1</b>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/riley/riley2.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name (Alias): Riley Bogg
Actress's name: Ellie Nova
Age: 22
Height: 5'9" (175 cm)
Weight: 125 lbs (57 kg)
Build: 86-66-91 cm (34-26-36)
Eye Color: Brown – warm, bright with enthusiasm
Hair: Blonde, bob cut
Skin Tone: Fair, clear
Scars/Tattoos: Script tattoo on her left inner forearm reading “have courage to be kind”
Piercings: None
Background
Origin: Born in Victorville, California; relocated to Bason after completing academy training
Occupation: Rookie at the Bason Sheriff Department
Reputation: Young, eager, and still learning the ropes. Known for her optimism and willingness to take on tasks others avoid. Her enthusiasm sometimes borders on naïveté
Admiration: Holds the sheriff in high regard, seeing him as both a mentor figure and a symbol of what she hopes to become
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $RileySexScene1 is 1>>
<<button [img[img/character/riley/rileyblowjob3.webp][RileyHouse1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/riley/rileyblowjob3.webp]]
</div>
<</if>>
<b>Riley house visit 1</b>
</td>
<td>
<<if $RileySexScene2 is 1>>
<<button [img[img/character/riley/rileyshower1.webp][RileyBathroomSex0]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/riley/rileyshower1.webp]]
</div>
<</if>>
<b>Riley house visit 2</b>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/danni/danni.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name (Alias): Danni Varga
Actress's name: Gabriela Lopez
Age: 27
Height: 5'0" (152 cm)
Weight: 110 lbs (50 kg)
Build: 107-71-97 cm (42-28-38)
Eye Color: Brown
Hair: Black, glossy, usually styled to show off her wealth
Skin Tone: Warm, with Latin features that make her stand out in Bason
Scars/Tattoos: None visible
Piercings: None
Background
Origin: Born in Dothan, Alabama; relocated to Bason around five years ago
Occupation: Unknown, though her wealth suggests family money or investments
Family: A single mother with a nine-year-old son.
Reputation: Known for her rudeness and arrogance, she hardly interacts with neighbors.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $DanniSexScene1 is 1>>
<<button [img[img/character/danni/dannisex1.webp][SingleMom1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/danni/dannisex1.webp]]
</div>
<</if>>
<b>Danni night visit 1</b>
</td>
<td>
<<if $DanniSexScene2 is 1>>
<<button [img[img/character/danni/dannihugsex.webp][DanniBreakIn2]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/danni/dannihugsex.webp]]
</div>
<</if>>
<b>Danni night visit 2</b>
</td>
<td>
<<if $DanniSexScene3 is 1>>
<<button [img[img/character/danni/dannidoggysex1.webp][DanniVisit1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/danni/dannidoggysex1.webp]]
</div>
<</if>>
<b>Danni night visit 3</b>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/cory/cory.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name (Alias): Cory Runn
Actress's name: Cory Chase
Age: 44
Height: 5'5" (165 cm)
Weight: 120 lbs (54 kg)
Build: 86-66-89 cm (34D-26-35)
Eye Color: Brown – sharp and critical
Hair: Blonde, cut practical but still flattering
Skin Tone: Fair, well-maintained for her age
Scars/Tattoos: None visible
Piercings: None
Background
Origin: Born in New Jersey; moved to Bason to pursue an academic career
Occupation: Science teacher at Bason University
Reputation: Known among students as harsh, strict, and demanding. She has little patience for excuses and expects the same discipline from her students that she shows in her own life
Personality: Blunt, pragmatic, and difficult to please.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $CorySexScene1 is 1>>
<<button [img[img/character/cory/corycum.webp][CoryTalk1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/cory/corycum.webp]]
</div>
<</if>>
<b>Cory Blackmail 1</b>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/rissa/rissa.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name (Alias): Rissa May
Actress's name: Rissa May
Age: 24
Height: 5'3" (160 cm)
Weight: 126 lbs (57 kg)
Build: 86-61-91 cm (34DD-24-36)
Eye Color: Brown – Quietly curious
Hair: Brown, usually tied back loosely while working
Skin Tone: Light, smooth
Scars/Tattoos: Zodiac sign tattoo on her left shoulder blade
Piercings: Navel
Background
Origin: Born and raised in Bason
Occupation: Warehouse worker at the Bason warehouse, known for very hardworking
Reputation: Keeps to herself, quiet during the day but at night...
Strange Habit: Has a peculiar hobby of strolling through the warehouse at night naked,
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $RissaSexScene1 is 1>>
<<button [img[img/character/rissa/rissamasturbate.webp][RissaIntro]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/rissa/rissamasturbate.webp]]
</div>
<</if>>
<b>Rissa Voyeur 1</b>
</td>
<<if $RissaSexScene2 is 1>>
<<button [img[img/character/rissa/rissablowjob.webp][Rissa1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/rissa/rissablowjob.webp]]
</div>
<</if>>
<b>Rissa Blowjob 1</b>
<td>
<<if $RissaSexScene3 is 1>>
<<button [img[img/character/rissa/rissadoggy.webp][Rissa3]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/rissa/rissadoggy.webp]]
</div>
<</if>>
<b>Rissa Sex 1</b>
</td>
</tr>
<tr>
<td>
<<if $RissaSexScene4 is 1>>
<<button [img[img/character/rissa/rissaboobjob.webp][RissaBoobJob]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/rissa/rissaboobjob.webp]]
</div>
<</if>>
<b>Rissa Paizuri 1</b>
</td>
<td>
<<if $RissaSexScene5 is 1>>
<<button [img[img/character/rissa/rissacowgirl.webp][RissaVisit1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/rissa/rissacowgirl.webp]]
</div>
<</if>>
<b>Rissa Sex 2</b>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/vicki/vicki1.jpg" width=100%>
Full Name (Alias): Vicki Alvarez
Actress's name: Vicki Chase
Age: 20
Height: 5'4" (162 cm)
Weight: 129 lbs (59 kg)
Build: 86-69-84 cm (34C-27-33)
Eye Color: Hazel – playful, lively
Hair: Brown, often worn loose, bouncing with every step
Skin Tone: Warm, mixed-race complexion that gives her a distinctive glow
Scars/Tattoos: None visible
Piercings: Navel
Background
Origin: Born in Los Angeles, California; moved to Bason to attend university
Occupation: Cheerleader at Bason University, known for her spirited performances and outgoing personality
Reputation: Popular on campus, admired for her looks and charisma
Personality: Fun-loving and social, she enjoys being the center of attention but has a very kinky desire.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $VickiSexScene1 is 1>>
<<button [img[img/character/vicki/vickigangbang2.webp][Vicki1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/vicki/vickigangbang2.webp]]
</div>
<</if>>
<b>Vicki Gangbang 1</b>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<h2>UI bar Guide</h2>
<img src="img/guild/leftsidebarguide.png" width=50% style="display: block; margin: 0 auto;">
<strong>Stats</strong>:
<b>Time</b>: Time advances by 5 minutes whenever you travel to a new location.
<b>Money</b>: Cash you carry.
<b>Bank</b>: Money saved in your account.
<b>Hunger</b>: If it reaches 'Starving,' you will have one day left to eat.
<b>Energy</b>: Decreases by 1 each time you travel to a new location.
<b>Strength</b>: Certain events require a minimum Strength level.
<b>Endurance</b>: Certain events require a minimum Endurance level. It affects your maximum Energy and slightly increases your accuracy in the gunfight mini-game
<b>Intelligence</b>: Certain events require a minimum Intelligence level. It slightly increases your accuracy in the gunfight mini-game
<b>Charisma</b>: Certain events require a minimum Charisma level.
<strong>Moral spectrum</strong>: This is the moral stat. Your moral level will influence the choices available to you in the future.
<h2>Inventory Guide</h2>
<img src="img/guild/inventoryguide.png" width=100%>
<b>You can now access your inventory from the right sidebar</b>
<<nobr>>
<div class="dialogue-box">
<img src="img/avatar/dev_avatar.png" class="dialogue-avatar" alt="Dev">
<div class="dialogue-content">
<div class="dialogue-speaker">Dev</div>
<div class="dialogue-text"><b>Even though there are dozens of item types, they eventually boil down to those you can eat and those you can’t.</b></div>
</div>
</div>
<</nobr>><h2>Map and Location Guide</h2>
<img src="img/map/chapter1map.png" width=100%>
<b>The map shows major locations like the BSD, Town Hall, Park, Casino, and Hotel with icons. Hover over an icon to identify it. Some locations are accessible but hidden.</b>
<b>The town of Bason is divided into 5 areas:</b>
<b>Town central area: Townhall, BSD, bank, mall…</b>
<b>South Side: Abandoned Mine, Salon, Library…</b>
<b>West Side: Nightclub, Hotel, Casino,…</b>
<b>North Side: Sex shop, North Residential Area, Gun Store,…</b>
<b>East Side: East Residential Area,… </b>
<b>If you prefer to use link to travel, then these location will help you a lot in navigation: South Side, West Side, North Side, East Side</b>
<<nobr>>
<div class="dialogue-box">
<img src="img/avatar/dev_avatar.png" class="dialogue-avatar" alt="Dev">
<div class="dialogue-content">
<div class="dialogue-speaker">Dev</div>
<div class="dialogue-text"><b>I recommend using the map to travel between major locations instead of the links.</b></div>
</div>
</div>
<</nobr>><<goto $prevPassage>>
<<showPopup "Cheat Code Guild">>
<<showPopup "Hint Guild">>
<<showPopup "Phone Guild">>
<<showPopup "Inventory Guild">>
<<showPopup "Map Guild">>
<<showPopup "Right Sidebar Guide">>
<<showPopup "Left Sidebar Guide">>
<<showPopup "General Guild">>
<h2>General Guide</h2>
<b>Your objectives are simple: Fight criminals, be a criminal, uncover the town’s mysteries, and impregnate as many girls as you can along the way.</b>
<b>There are a few important things to remember: </b>
<b>Eating resets your Hunger status to 3 days or more, depending on the food you eat. Go beyond that without food, and you’ll be rushed to the hospital with no insurance.</b>
<b>You’re the sheriff now, which means you have a steady income. Collect your payment at the bank, but make sure to speak with the mayor’s secretary first.</b>
<<nobr>>
<div class="dialogue-box">
<img src="img/avatar/dev_avatar.png" class="dialogue-avatar" alt="Dev">
<div class="dialogue-content">
<div class="dialogue-speaker">Dev</div>
<div class="dialogue-text"><b>Welcome to the beginner’s guide. Be sure to read it carefully so you won’t miss anything in your playthrough.</b></div>
</div>
</div>
<</nobr>><h2>Hint Guide</h2>
<img src="img/guild/walkthroughguide.png" width=100%>
<b>The guide feature in the right sidebar offers walkthroughs for the main story and individual characters. Some character progression is needed to advance the story; some isn't.</b><img src="img/character/gabbie/gabbie.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name (Alias): Gabbie Banks
Actress's name: Gabbie Carter
Age: 25
Height: 5'7" (170 cm)
Weight: 117 lbs (53 kg)
Build: 76-61-89 cm (30F-24-35)
Eye Color: Green – sharp, calculating
Hair: Blonde, usually styled neatly to suit her professional role
Skin Tone: Fair, with a polished appearance fitting for her line of work
Scars/Tattoos: Scorpion on her right side; flower tattoos just below each knee
Piercings: Septum
Background
Origin: Born and raised in Bason, tied to the town through both family and career
Occupation: Banker, responsible for handling payroll and payments, including yours.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $GabbieSexScene1 is 1>>
<<button [img[img/character/gabbie/gabbiesex1.webp][GabbieDrugSex1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/gabbie/gabbiesex1.webp]]
</div>
<</if>>
<b>Gabbie Sex 1</b>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Salt Bar</div>
<<setPassageVariableMap>>
<<nobr>>@@.option-button;[[Salt]]@@
<<if $GregMeeting == 1>>@@.option-button;[[???|GregTalk1]]@@<</if>><</nobr>>
<div class="styled-line"><center><b>Buy drinks</b></center></div>
<<nobr>><<if $MCMoney >= 25>>@@.option-button;<<link "Buy Beer - $25">><<set $MCMoney -= 25>><<addItem "Beer" "img/item/beer.png" "A can of beer." "" "Consumable" 25 1>><<goto "SaltBarInside">><</link>>@@<<else>>@@.option-button-disabled;Beer - $25@@<</if>>
<<if $MCMoney >= 400>>@@.option-button;<<link "Buy Vodka - $400">><<set $MCMoney -= 400>><<addItem "Vodka" "img/item/vodka.png" "A bottle of Vodka" "" "Consumable" 400 1>><<goto "SaltBarInside">><</link>>@@<<else>>@@.option-button-disabled;Vodka - $400@@<</if>>
<<if $MCMoney >= 700>>@@.option-button;<<link "Buy Whisky - $700">><<set $MCMoney -= 700>><<addItem "Whisky" "img/item/whisky.png" "A bottle of Whisky" "" "Consumable" 700 1>><<goto "SaltBarInside">><</link>>@@<<else>>@@.option-button-disabled;Whisky - $700@@<</if>>
<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bar/saltbar.jpg][SaltBar]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
<td>
<<button [img[img/location/bar/winestorage.jpg][Wine Storage]]>><</button>>
<div class="location-name"><b>Wine Storage</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You pushed through the glass doors of the station, the morning light still clinging to your shoulders. Donna looked up from the front desk, her expression a touch uneasy.
<<dialogue "img/character/donna/donnaavatar.jpg" "Donna" "Sir, that lady over there, she’s been waiting for you. Wouldn’t talk to me, wouldn’t talk to anyone. Said she’ll only speak to the sheriff.">>
<<dialogue $playerAvatar "You" "Okay, Donna, let me handle this">>
You followed Donna’s glance. A woman sat in the lobby, legs crossed, nails tapping against her designer purse. Black hair sleek and glossy, styled like every strand had its place. She didn’t rise when you entered, expectant, like you were late for an appointment she hadn’t scheduled.
Danni Varga. You remembered that face. You’d knocked on her door during the Rebecca case, and she’d met you with sharp words and a colder attitude, refusing to give you even 5 minutes. You already know why she's here.
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Finally, you're the Sheriff, right? Can we go somewhere private? I’m not about to shout my business in front of gawkers.">>
@@.option-button;[[Invite Danni to you office|DanniTalk1.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsdreception.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Key Makers Toolbox</h2><img src="img/item/keymakerstoolbox.jpg" width =100%>
<p><strong>Type:</strong> Tool</p><p><strong>Full Description:</strong>Advance Lock Pick tool.</p>
You move toward the treadmill, towel slung around your neck, when something catches your eye near the far wall—by the stretching mats and locker corridor. A figure.
A man. He’s not working out. Not even dressed for it. He lingers near the edge, eyes darting toward the women’s section more than once.
You narrow your gaze.
He shifts again—with dick in his hand. Too obvious, the mother fucker is jerking broad daylight in the gym. You quietly approach. He doesn’t notice you until you’re right behind him.
<<dialogue $playerAvatar "You" "Lose something?">>
<img src="img/various/gymvoyeur1.png" width=100%>
<<dialogue "img/character/others/gymvoyeuravatar.png" "???" "I—I was just—uh, I was looking for the water station">>
<<dialogue $playerAvatar "You" "Yeah right. Come with me">>
<<dialogue "img/character/others/gymvoyeuravatar.png" "???" "I didn’t… I wasn’t doing anything. Look, man, I’ll leave. No trouble">>
<<dialogue $playerAvatar "You" "You want me to bring you in? I can call it in right now. Or…">>
<<dialogue "img/character/others/gymvoyeuravatar.png" "???" "Or?">>
<<dialogue $playerAvatar "You" "Pull out your wallet">>
He hesitates. Then quickly pulls out his wallet, counts out five twenties, hands them over with a trembling hand.
<<dialogue "img/character/others/gymvoyeuravatar.png" "???" "That's all I have">>
<<dialogue $playerAvatar "You" "Get lost">>
@@.option-button;[[Leave|GymVoyeurCaughtLoot]]@@
<<set $GymVoyeurCaught = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/gym.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/gymvoyeur1.png" width=100%>
You spotted the voyeur again.
You cut across the gym floor, closing the distance before he had a chance to slip away.
<<dialogue $playerAvatar "You" "Funny seeing you here again">>
<<dialogue "img/character/others/gymvoyeuravatar.png" "???" "Hey, Sheriff. Nothing funny about it. Just… doing my rounds">>
<<dialogue $playerAvatar "You" "Talk, or I will put you in the cell where you belong">>
<<dialogue "img/character/others/gymvoyeuravatar.png" "???" "Sir, surely $100, no $200, is enough to let me off, right?">>
<<dialogue $playerAvatar "You" "Nah, I want to know what are you?">>
<<dialogue "img/character/others/gymvoyeuravatar.png" "Doug" "I’m Doug, I'm a handyman. Work all over town. Fix pipes, change locks, patch roofs—you name it. This gym’s on my list sometimes, that’s all">>
<<dialogue $playerAvatar "You" "If you’re really a handyman, then you must carry a key-making kit. Can’t do the job without it, right?">>
<<dialogue "img/character/others/gymvoyeuravatar.png" "Doug" "Yeah… it’s in my car">>
You motioned for him to lead the way. Outside in the lot, he unlocked a beat-up sedan and popped the trunk. Sure enough, nestled inside was a battered metal toolbox—half locksmith’s gear, half break-in kit. You bent over it, letting your fingers brush the cold tools: key cutters, tension wrenches, skeleton keys. Not the sort of thing a “legit” handyman should be hauling around.
<<dialogue $playerAvatar "You" "I’ll be taking this">>
You closed the box, hefted it into your grip, and straightened.
<<dialogue "img/character/others/gymvoyeuravatar.png" "Doug" "Hey, c’mon, Sheriff. That’s my livelihood—">>
<<dialogue $playerAvatar "You" "You’ll live. But don’t let me catch you hanging around like this again">>
The man’s face darkened, but he knew better than to push it. Without another word, he slid into his car and peeled out of the lot.
@@.option-button;[[Leave|GymVoyeurCaughtLoot]]@@
<<set $GymVoyeurCaught = 2>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/gym.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/gymvoyeur1.png" width=100%>
You caught him again.
<<dialogue $playerAvatar "You" "Didn’t I tell you not to hang around like this anymore?">>
<<dialogue "img/character/others/gymvoyeuravatar.png" "Doug" "Sheriff, I swear, I was just passing through—">>
<<dialogue $playerAvatar "You" "Cut the crap. One hundred">>
<<dialogue "img/character/others/gymvoyeuravatar.png" "Doug" "There. That’s all I got">>
He groaned, pulling a battered wallet from his back pocket. Bills folded, crumpled, and thin. He counted them out with trembling fingers and slapped them into your hand,
@@.option-button;[[Leave|GymVoyeurCaughtLoot]]@@
<<set $GymVoyeurCaught = 3>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/gym.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if $GymVoyeurCaught == 1 || $GymVoyeurCaught == 3>>
<<set $MCMoney +=100>>
<<elseif $GymVoyeurCaught == 2>>
<<addItem "Key Makers Toolbox" "img/item/keymakerstoolbox.jpg" "A handyman tool." "Advance Lock Pick tool." "Tool" 1000 1>>
<</if>>
<<goto "Gym">><<addItem "Stone Disk" "img/item/artifact1.jpg" "A small disk made of stone." "A small disk made of stone." "Artifact" 5000 1>>
<<set $Artifact1 = 0>>
<<goto "North Side">><<addItem "Grilled Fish" "img/item/grilledfish.png" "A small Grilled Fish with lemon." "fill your stomach." "Consumable" 5 1>>
<<goto "BSDInside">>You moved silently through the rooms, your boots brushing against the plush carpet, every creak of the wooden floor underlined by your heartbeat. You pushed it wider with a slow hand.
There she was. Danni, sprawled across her silk sheets, wearing no bra, her tits jiggling over as she rolls over. She looked softer here, stripped of the arrogance and venom she wore in daylight.
For a moment, you just watched her chest rise and fall, the steady rhythm filling the silence.
But you weren’t here to admire. You were here to fuck.
@@.option-button;[[Aprroach|DanniNightVisit1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You led her into your office. She swept inside ahead of you, uninvited, and dropped into the chair opposite your desk as if she owned it.
<img src="img/character/danni/dannipolicereport1.png" width=100%>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "I’ll keep this short, I was assaulted. A man broke into my house last night and assaulted me. And before you start asking me pointless questions—no, I don’t know his name, and no, I don’t care to sit around waiting for some half-baked investigation from one of your rookies. You’re going to find him. That’s your job. So do it">>
Her voice cracked like a whip, every syllable dripping with entitlement. You kept your tone steady, measured
<<dialogue $playerAvatar "You" "Ms. Varga, I’m sorry this happened to you. But if you want me to catch him, I need details. What he looked like, what he said, anything you can recall. Every bit matters">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Details? I told you what I know. Medium height, leather jacket, smelled like whiskey. That’s it. Now, I don’t want excuses, Sheriff. I expect results. Don’t think for a second you can push this aside">>
<<dialogue $playerAvatar "You" "I treat every case seriously, Ms. Varga. Yours is no different">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "What if that asshole comes back? ">>
<<dialogue $playerAvatar "You" "I’ll send a deputy to keep an eye on you. In the meantime, consider upgrading your security system, maybe with a new lock. I will find the man who did this. That’s my word to you">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Good, You’d better keep that promise">>
Without waiting for dismissal, she strode out, heels clicking against the floor, leaving your office heavy with the echo of her demands. She can't even remember your correct details; maybe you should visit her again.
@@.option-button;[[Leave|BSDInside]]@@
<<set $Danni1 = 0>>
<<set $Danni2 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Danni", "Obtain the Key Makers Toolbox from the perv at the gym to break into Danni's house")>>
Your touch on her skin makes Danni stir, her eyelids fluttering open groggily.
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "What? It's you? No, not again!">>
She gasps, writhing beneath you as you pull up her sweater, exposing her large, pert breasts. You turn Danni over, then a searing pain explodes across her buttocks as you start spanking her. She screams, arching her back in agony and most likely pleasure.
<img src="img/character/danni/dannihugsex.webp" width=100%>
<<dialogue "img/character/danni/dannisexavatar1.jpg" "Danni" "AHHH! NOOOO! IT HURTS, STOP, PLEASE! IT'S TOO BIG, YOU'RE TEARING ME APART!">>
You lift Danni up, holding her in an embrace, and plunge your cock inside her pussy. Danni's moans crescendo into a high-pitched keen as your relentless thrusts pound into her, each stroke sending shockwaves of pain and pleasure through her ravaged core. Her hips buck wildly, trying to escape the brutal penetration, but the bindings hold her fast.
<<dialogue "img/character/danni/dannisexavatar2.jpg" "Danni" "N-no more...I can't...can't take it anymore! P-please, I'm begging you">>
Despite her pleas, Danni can feel the pleasure building within her, a twisted response to the pain, the sheer violation of being used so brutally.
@@.option-button;[[Thow Danni to the bed|DanniNightVisit2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>With a gentle yet firm touch, Evelyn wraps her slender fingers around your hardening length, stroking it slowly as she gazes up at you with a mix of professionalism and curiosity. Her thumb grazes the sensitive underside, coaxing pre-cum to leak from the tip.
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Mmm, nice and thick. Do you feel comfortable, sheriff?">>
<<dialogue $playerAvatar "You" "More than comfortable">>
With a deft twist of her wrist, she targets the sensitive head, applying just the right amount of pressure to have you teetering on the brink. Her thumb swirls around the slit, milking out every precious drop of precum as she watches your reactions with rapt attention.
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "I'm amazed at how long you can hold it">>
<<dialogue $playerAvatar "You" "Maybe you can help speed this up somehow">>
Evelyn smirks, reaching for the oil bottle and slowly drizzles it onto your foot. She quickens her pace, her fingers dance along the ridges and veins, sending tingles of pleasure coursing through your body.
<img src="img/character/evelyn/evelynaddingoil.webp" width=100%>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "How about this?">>
@@.option-button;[[Cum|EvelynHandjob1.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/evelyn/evelyn.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name (Alias): Dr. Evelyn Wilson
Actress's name: Angela White
Age: 40
Height: 5'3" (160 cm)
Weight: — (not listed)
Build: 102-69-104 cm (40-27-41), average frame with a generous natural bust, carried with quiet confidence
Eye Color: Blue – clear, piercing, often clinical in their focus
Hair: Brown, usually tied back in a practical style for work
Skin Tone: Fair, lightly weathered by time but well cared for
Scars/Tattoos: None visible
Piercings: Navel
Background
Origin: Born in Sydney, New South Wales, Australia; relocated to the U.S. for medical practice
Occupation: Doctor serving the community of Bason.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $EvelynSexScene1 is 1>>
<<button [img[img/character/evelyn/evelynhandjob.webp][EvelynChat1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/evelyn/evelynhandjob.webp]]
</div>
<</if>>
<b>Evelyn Handjob 1</b>
</td>
<td>
<<if $EvelynSexScene2 is 1>>
<<button [img[img/character/evelyn/evelynblowjob2.webp][DoctorVisit1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/evelyn/evelynblowjob2.webp]]
</div>
<</if>>
<b>Evelyn Blowjob 1</b>
</td>
<td>
<<if $EvelynSexScene3 is 1>>
<<button [img[img/character/evelyn/evelynmissionary1.webp][DoctorVisit2]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/evelyn/evelynmissionary1.webp]]
</div>
<</if>>
<b>Evelyn Sex 1</b>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Hotel</div>
<<setPassageVariableNoMap>>
<<nobr>>@@.option-button;[[Bianca]]@@
<<if $MCMoney >= 500 and $DeluxeRoomBookedTime < $now>>
@@.option-button;<<link "Book a deluxe room for a day - $500">><<set $MCMoney -= 500>><<goto "HotelBookingService1">><</link>>@@
<<else>>
@@.option-button-disabled;Book a deluxe room for a day - $500@@<</if>>
<<if $MCMoney >= 1000 and $JuniorSuiteBookedTime < $now>>
@@.option-button;<<link "Book a Junior Suite for a day - $1000">><<set $MCMoney -= 1000>><<goto "HotelBookingService2">><</link>>@@
<<else>>
@@.option-button-disabled;Book a Junior Suite for a day - $1000@@<</if>>
<<if $MCMoney >= 2000 and $PremiumSuiteBookedTime < $now>>
@@.option-button;<<link "Book a Premium Suite for a day - $2000">><<set $MCMoney -= 2000>><<goto "HotelBookingService3">><</link>>@@
<<else>>
@@.option-button-disabled;Book a Premium Suite for a day - $2000@@<</if>>
<</nobr>><div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hotel/elevator.jpg][Elevator]]>><</button>>
<div class="location-name"><b>Elevator</b></div>
</td>
<td>
<<button [img[img/location/hotel/hotel.png][Hotel]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Your head throbs like someone split it open with a hammer. The first thing you notice is the taste of blood in your mouth, metallic and thick. The second thing are the ropes biting into your wrists, the wooden chair under you. When the bulb above flickers on, the room snaps into focus.
A man stands in front of you, dressed head-to-toe in black, face hidden behind a black mask.
<<dialogue "img/various/unknown.png" "???" "Rissa and Greg… they opened their mouths. Told the boss everything">>
The masked man steps closer, a revolver dangling casually from his grip. He pops open the cylinder, drops in a single bullet with a click that echoes, and spins it.
<<dialogue "img/various/unknown.png" "???" "You got one chance here, Sheriff. Jack sent me to clean up this mess. But before I do, I want some answers">>
He sneers, pressing the cold steel against your thigh.
<<dialogue "img/various/unknown.png" "???" "Every time you stay quiet, every time you lie…Fate decide if you walk outta here. Or crawl. Question one, What are you trying to do?">>
@@.option-button;[[Stay silent|GregTalk3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/nonameroom1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You stare at him, jaw tight. No words. He tilts his head, almost amused. The barrel nudges harder into your thigh.
Click.
He squeezes the trigger, the gun swinging at his side before he snaps it back toward you.
<<dialogue "img/various/unknown.png" "???" "Question two. Who do you actually work for?">>
You say nothing.
Click.
The hammer drops again. Your chest tightens, sweat breaking at your temple.
Suddenly, he come at you face to face.
<<dialogue "img/various/unknown.png" "???" "Is it the Italian?">>
Click.
<<dialogue "img/various/unknown.png" "???" "The Biker?">>
Click.
<<dialogue "img/various/unknown.png" "???" "Or the chicken man?">>
Click.
By the fifth round your pulse is racing, every empty chamber carving years off your life. The man leans even closer.
<<dialogue "img/various/unknown.png" "???" "One chance left">>
He spins the cylinder slowly, letting you hear the bullet slide into place. Then he presses the revolver hard against your cock.
<<dialogue "img/various/unknown.png" "???" "Is it true that Jack McMahon laid his hands on Rissa?">>
@@.option-button;[[Speak up|GregTalk4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/nonameroom1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "YES">>
The man's finger curls. Click. The gun doesn’t fire. He freezes for a moment, then lets out a cold laugh. Then, with a deliberate motion, the man lifts the mask off his face.
<<dialogue "img/character/greg/gregavatar.png" "Greg" "You are one sick mother fucker">>
You blink through the haze, forcing your mind to catch up, Rissa’s brother.
<<dialogue "img/character/greg/gregavatar.png" "Greg" "Rissa told me everything. About you and what you told her. I just want to make sure you aren't just using my sister or me">>
<<dialogue $playerAvatar "You" "I am not">>
<<dialogue "img/character/greg/gregavatar.png" "Greg" "But again, words don’t mean a thing in Bason">>
<<dialogue $playerAvatar "You" "Apparently so">>
<<dialogue "img/character/greg/gregavatar.png" "Greg" "I need proof. Solid proof Jack may have touched my sister. Bring me that">>
He stands, takes out his knife, and cuts you loose.
@@.option-button;[[Leave|Route 13]]@@
<<set $now to setup.changeDate($now, 'hours', 3)>>
<<set $GregMeeting = 0>>
<<set $ProofForGreg = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/nonameroom1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Call Joe for help")>>
<<run addContact("Greg May", "img/character/greg/gregavatar.png", "555-5753", "", "CallingGreg")>>
<<run setup.showNotification("Added Greg to your contact")>>You waste no time, scroll to the number you swore you’d only call if you had no other choice. Press dial. The line clicks after a few rings. A familiar groan. Joe’s voice is rough, tired, like you just dragged him out of a dream he didn’t want.
<<dialogue "img/various/unknown.png" "Joe" "You again?">>
<<dialogue $playerAvatar "You" "Yeah, it’s me, listen, I need you, Joe. One more time">>
<<dialogue "img/various/unknown.png" "Joe" "You keep saying ‘one more time. I’m starting to lose count">>
<<dialogue $playerAvatar "You" "I need a job only you can do. A set of photos. Must be realistic. I want to frame someone">>
<<dialogue "img/various/unknown.png" "Joe" "Wait, I thought you were playing a sheriff? What do you mean by “framing someone”?">>
<<dialogue $playerAvatar "You" "I am. Framing bad people for something they most definitely do">>
The other end of the line goes silent for a couple of minutes. Finally:
<<dialogue "img/various/unknown.png" "Joe" "Alright. Profiles. Send them now">>
You fire Rissa and McMahon's profiles over to Joe. Within seconds Joe’s tapping keys on the other end. The sound of his typing is a rapid-fire rhythm you remember from years back.
<<dialogue "img/various/unknown.png" "Joe" "Check your mailbox">>
Joe sends you the file. The images are flawless. Ultra-realistic. Anyone who saw it would swear it was the real thing.
<<dialogue $playerAvatar "You" "Great job, Joe">>
<<dialogue "img/various/unknown.png" "Joe" "Yeah yeah, did you meet her?">>
<<dialogue $playerAvatar "You" "Yes, I did. She's still pissed, I assume">>
<<dialogue "img/various/unknown.png" "Joe" "No shit, she's probably pissed at me too because I gave you her address. Fuck! I need to hang up; every time you call, I risk getting caught by him">>
Click. Line dead.
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@
<<set $ProofForGreg = 0>>
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<run hideSidebar()>>
<<addItem "Rissa Photo Set" "img/character/rissa/rissaandmcmahon.jpg" "A set of photoshopped images of Rissa and Jack McMahon." "Photos." "Photos" 5 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Give the photo set to Rissa")>>
<h2>Rissa Photo Set</h2><img src="img/character/rissa/rissaandmcmahon.jpg" width =100%>
<p><strong>Type:</strong> Photo files</p><p><strong>Full Description:</strong> A set of photoshopped image of Rissa and Jack McMahon.</p>
<<dialogue $playerAvatar "You" "Hi Rissa">>
You find Rissa in her shift. You hand her the envelope.
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "What’s this?">>
<<dialogue $playerAvatar "You" "Give it to Greg. Tell him it’s proof for, you know, proof that Jack McMahon touches you">>
<img src="img/character/rissa/rissaandmcmahon.jpg" width=100%>
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "But he didn't…Jesus Chris. These look… real. Like, real real">>
<<dialogue $playerAvatar "You" "Please give it to your brother; I'm counting on you">>
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "Okay, I'll give as soon as I finish working">>
<<dialogue $playerAvatar "You" "Thank you, Rissa">>
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "Wait, are you sure you want to leave?">>
@@.option-button;[[Yes|Warehouse]]@@
@@.option-button;[[No|RissaBoobJob]]@@
<<set $DavidDiningInvite1 = 1>>
<<run hideSidebar()>>
<<useItem "Rissa Photo Set">>
<<set $GregJoinIn1 = 1>>
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Continue with Marlene's guild")>>
<<run updateGuideTextForStoryline("Marlene", "Talk to David at his desk")>>
<<run updateGuideTextForStoryline("Rissa", "Continue with Chapter 1 guild")>>
<img src="img/character/rissa/rissaboobjob.webp" width=100%>
At the back of the warehouse, Rissa yanks her tight black top down, letting her heavy tits spill free—full, round, already flushed and glistening with a sheen of sweat. She spits once, hard, right into the deep valley between them, then gathers them in her hands and presses them together around your throbbing cock. The heat is instant, velvet-soft skin swallowing you whole, slick with her spit and the bead of pre-cum already leaking from your tip.
<<dialogue "img/character/rissa/rissasexavatar3.jpg" "Rissa" "You like that?">>
She starts moving—slow at first, sliding your cock up and down between those perfect tits, squeezing tighter on every upstroke so the swollen head pops out at the top, angry red and shining. Then faster, rougher, her breasts bouncing with the rhythm, slapping softly against each other and your thighs.
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "Hold still. I’m not done with you">>
She clamps her tits tighter around your cock, so tight it almost hurts, and starts fucking you with them in earnest. Up, down, up, down, fast, brutal strokes that make her heavy breasts slap together with wet, obscene claps Your hips jerk involuntarily; you can’t hold back
<<dialogue $playerAvatar "You" "I'm coming, Rissa">>
Your whole body locks up, balls drawing tight, and the first thick rope erupts with a guttural groan you can’t hold back. Hot, heavy spurts streak across her face and chest, painting her flushed tits in long, pearly stripes. You keep coming, pulse after pulse, until her whole face is glazed. She licks what she can reach, tongue dragging through the mess on her lips.
<img src="img/character/rissa/rissacumonface.webp" width=100%>
<<dialogue "img/character/rissa/rissasexavatar3.jpg" "Rissa" "Yummy">>
<<dialogue $playerAvatar "You" "Thank you for your service, Rissa">>
@@.option-button;[[Leave|RissaBoobJob1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Hey David, come to my office; I need to talk to you">>
<<dialogue "img/character/david/david.png" "David" "Yes, sir">>
In your office, you lay the plan out flat on the desk between you: routes, times, and what the truck’s carrying. This is the chance we have to take down the lord of war. When you finish, there’s a long breath. David folds his hands on the desk like he’s bracing himself.
<<dialogue "img/character/david/david.png" "David" "You want me in on a hijack. You want me to help you hijack a gun truck">>
<<dialogue $playerAvatar "You" "Yeah, I need somebody who knows how to move, how to think fast. I want the best watchers in the state to help">>
<<dialogue "img/character/david/david.png" "David" "I get why you’re doing this. I ain’t blind to what Jack’s doing either. But going out and taking a truck? That ain’t policing. That’s outlaw work. If I join, I’m not just risking my job. I’m risking everything—my family, Marlene...">>
<<dialogue $playerAvatar "You" "Okay, David. You don't need to explain yourself">>
<<dialogue "img/character/david/david.png" "David" "Sir?">>
David is surprised; he was expecting you to put more effort into convincing him.
<<dialogue $playerAvatar "You" "You are dismissed, David">>
@@.option-button;[[Think|SheriffOffice]]@@
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<set $MarleneTalk1 = 1>>
<<set $DavidConvince1 = 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to David's house and talk to Marlene")>>
<<run updateGuideTextForStoryline("Marlene", "Go to David's house in North Residential Area and talk to Marlene")>>
<div class="location-banner">David House</div>
<<setPassageVariableMap>>
<<if setup.isOpeningHours($now)>><<if $MarleneTalk1 == 1>>@@.option-button;[[Door Bell|MarleneAtHome1]]@@<</if>><</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/northresidentarea/northresidentarea.jpg][North Residential Area]]>><</button>>
<div class="location-name"><b>North Residential Area</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/davidhouse/davidhouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You knock once, twice. The porch light clicks on, and the door opens before you can count to three. Marlene’s standing there in a loose robe, hair still damp from a shower, one eyebrow lifted like she’s been expecting trouble and enjoys when it arrives.
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "I knew you'd come back. Come in before the neighbors think I’ve taken up with the whole police force">>
Marlene pours you a glass of wine without asking and perches on the arm of a chair, close enough that you can feel the heat of her. Her fingers line the stem of the glass as she watches you with amusement.
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "So you come here to finish the job?">>
You tell her about the plan, the truck, and David’s refusal.
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "You want me to talk to him? Convince him? That’s something I can do… but I don’t work for free. I want to cover the news exclusively">>
<<dialogue $playerAvatar "You" "Done">>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Not yet, sheriff. Since you’re already here, you have something that I need">>
<<dialogue $playerAvatar "You" "What now?">>
Marlene taps the rim of her glass like she’s making a bargain visible. She shifts closer to your left ear, voice dropping.
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Just let me taste it">>
You could say no. Only chance to get David to join in.
@@.option-button;[[Unzip|MarleneBlowjob]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/davidhouse/davidlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/marlene/marleneblowjob.webp" width=100%>
With a seductive smile, Marlene guides you towards her chest, pressing the tip of your cock against one of her engorged nipples through the thin fabric. The heat emanating from her body is palpable, and you can feel the hardened nub throbbing against you. She devours your cock in an instant.
As soon as your cock meets her mouth, Marlene wraps her lips around it, engulfing the thick shaft with eager enthusiasm. Her tongue swirls around the head, tasting your salty pre-cum as she begins to bob her head up and down, taking you deeper with each pass.
<<dialogue "img/character/marlene/marlenesexavatar1.jpg" "Marlene" "Mmmph...mmm...">>
Moans vibrate around your length as she sucks, her cheeks hollowing with the effort. Her hands roam over your thighs, squeezing and caressing.
Maintaining eye contact, she looks up at you with a sultry expression, while pleasuring you with her talented tongue, swirling it around the sensitive underside of your cock and flicking the frenulum.
<<dialogue "img/character/marlene/marlenesexavatar2.jpg" "Marlene" "Gluk... gluk...">>
With a fierce determination, Marlene relaxes her throat and takes you as deep as humanly possible, her nose pressing against your pubic bone as she swallows around your invading length.
<<dialogue "img/character/marlene/marlenesexavatar1.jpg" "Marlene" "Mmph... mmph... gggghhkkk...">>
<<dialogue $playerAvatar "You" "I'm near, Marlene">>
Just as you utter those fateful words, Marlene's throat constricts around you, milking your cock for every last drop of semen. Your orgasm hits like a tidal wave, and you erupt deep inside her, painting her throat with your hot, sticky release.
<img src="img/character/marlene/marlenecum1.webp" width=100%>
She swallows repeatedly, gulping down your potent load as it floods her mouth and spills down her chin. A string of saliva connects your tip to her plump lower lip as she catches her breath, her chest heaving with exertion. With a seductive smirk, she laps at the drool, savoring the taste of you.
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Thank you for your service, sheriff">>
<<dialogue $playerAvatar "You" "Don't forget to tell David">>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "I won't">>
@@.option-button;[[Leave|MarleneBlowjob1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/davidhouse/davidlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You set up a meeting in your place and wait for David and Greg to come. David came first. He sees you, pauses at the doorway, and for a second you read the same tired worry you saw at the station.
<<dialogue $playerAvatar "You" "You good?">>
<<dialogue "img/character/david/david.png" "David" "Yes, thanks. Thank you for still letting me come after I told you no">>
<<dialogue $playerAvatar "You" "Don't think about it">>
Then Greg slips in quickly after. He drops into the last chair, mask on. He taps the map with a nail, his voice comes muffled when he speaks.
<<dialogue "img/character/greg/gregavatar.png" "Greg" "I'm in, sheriff. So what's the plan anyway?">>
David glances at Greg, then back at you. There’s a short, tight moment where the three of you calibrate. He leans forward, palms flat on the table.
<<dialogue "img/character/david/david.png" "David" "Yeah, walk me through it again">>
<img src="img/map/custommap/truckhijackmap1.png" width=100%>
You point at the map with the tip of a pen.
<<dialogue $playerAvatar "You" "The truck comes from the south, through the abandoned mine stretch. There will also be an armored escort car with them. We stop it a few miles north of the bridge, where the road clears and the mine looks like the closest likely culprit. But not too close">>
You draw the route and tap each point as you speak, turning to David.
<<dialogue $playerAvatar "You" "Are you good with bikes?">>
David nods. Then you flip the map toward Greg.
<<dialogue $playerAvatar "You" "I need you behind the wheel of the armored escort. Make the turn at the right moment, and you will be the only one to walk out of this alive. Tell McMahon what he needed to hear when this is all over.">>
David and Greg ask their questions. The meeting lasts for another 2 hours.
You fold the map, slide it back into the jacket, and stand. The plan is clean on paper because you made it so. The three of you walk out into the night with the timing burning in your heads and the thin comfort that the map can still be folded.
@@.option-button;[[Meeting ends|Wine Storage]]@@
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $DavidJoinIn1 = 0>><<set $GregJoinIn1 = 0>>
<<set $TruckHijack1 = 1>><<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Execute the plan when the truck passes through Route 13, the high way in the south. Time: " + formatGameDateTime($McMahonHijack1))>>
<div class="location-banner">Route 13</div>
<<setPassageVariableMap>>
<<nobr>><<set _before to setup.changeDate($McMahonHijack1, 'hours', -2)>><<set _after to setup.changeDate($McMahonHijack1, 'hours', 2)>>
<<if $TruckHijack1 == 1 && $now.getTime() >= _before.getTime() and $now.getTime() <= _after.getTime()>>
@@.option-button;[[Hijack the Truck|TruckHijackExecution]]@@
<<elseif $now >= $McMahonHijack1 && $GameMode <= 2>>
@@.option-button;[[Hijack the Truck|TruckHijackExecution]]@@
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/southside/southside.jpg][South Side]]>><</button>>
<div class="location-name"><b>South Side</b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][JocelynHouse]]>><</button>>
<div class="location-name"><b></b></div>
</td>
<td class="locked">
<<button [img[img/various/unknown2.png][JocelynHouse]]>><</button>>
<div class="location-name"><b></b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/route13/route13.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Night eats the horizon in one slow bite. You and David sit on the ridge above Route 13, knees tucked under you, bikes idling in the dirt behind. The cold finds every seam in your jacket. For thirty minutes you watch the black line of the road and the pulse of headlights until the convoy breathes into view: the escort and the truck.
From the hilltop, you stand with David, watching the road below. You flip on the autopilot of the car rigged with explosives and send it rolling toward the oncoming truck. Beside you, David tenses. You tell him to get ready.
Just as the explosive-laden car barrels toward the escort, Greg swerves hard, narrowly avoiding impact. A split second later, the rig slams straight into the truck, erupting in a massive explosion. The gun safe blasts fifty feet into the air and lands on the road.
<img src="img/various/truckhijack.webp" width=100%>
A thunderclap so loud it rips the air in two. An explosion that tears the convoy apart.
<<dialogue $playerAvatar "You" "Now!">>
@@.option-button;[[Let's go|TruckHijackExecution1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/route13/route13atnight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><!--
=================================================================
GUNFIGHT MINIGAME — Twine SugarCube
=================================================================
HOW TO USE IN YOUR PASSAGE:
1. Set your variables before entering this passage:
<<set $GunAccuracy to 60>> (0–100, hit chance %)
<<set $GunEnemyCount to 3>> (how many enemies)
<<set $GunTimeLimit to 15>> (seconds to kill them all)
2. Paste this entire file's content into a Twine passage.
3. On WIN → goes to passage: DefeatedThug
On LOSE → goes to passage: BADEnding2Bundle1
That's it. You can reuse this passage any time by just
setting the three variables differently each time.
=================================================================
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gunfight</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Rye&family=Special+Elite&display=swap');
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--gold: #d4a017;
--gold-dim: #8b6914;
--blood: #c8360c;
--dark: #0d0a07;
--panel: #1a1208;
}
html, body {
width: 100%; height: 100%;
background: var(--dark);
font-family: 'Special Elite', serif;
overflow: hidden;
cursor: none;
}
/* Scanlines */
body::after {
content: '';
position: fixed; inset: 0;
background: repeating-linear-gradient(
0deg, transparent, transparent 2px,
rgba(0,0,0,0.12) 2px, rgba(0,0,0,0.12) 4px
);
pointer-events: none; z-index: 9998;
}
/* ── Cursor ── */
#cursor {
position: fixed; width: 48px; height: 48px;
pointer-events: none;
transform: translate(-50%, -50%);
z-index: 9999; transition: transform 0.05s;
}
#cursor.firing { transform: translate(-50%, -50%) scale(0.7); }
#cursor.on-enemy .cur-ring { stroke: #ff4422 !important; }
#cursor.on-enemy .cur-lines { stroke: #ff4422 !important; }
/* ── Arena ── */
#arena {
position: fixed; inset: 0;
background-image: url('img/location/route13/route13.png');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
overflow: hidden;
}
#arena::after {
content: '';
position: absolute; bottom: 120px; left: 0; right: 0; height: 2px;
background: linear-gradient(90deg, transparent, #3d2d0a 20%, #5a3d10 50%, #3d2d0a 80%, transparent);
}
.vignette {
position: absolute; inset: 0;
background: radial-gradient(ellipse at center, transparent 40%, rgba(0,0,0,0.75) 100%);
pointer-events: none; z-index: 1;
}
/* ── Dust ── */
.dust {
position: absolute; border-radius: 50%;
background: rgba(180,130,50,0.15);
pointer-events: none;
animation: dustfloat linear infinite;
}
@keyframes dustfloat {
0% { transform: translateY(0) translateX(0); opacity: 0; }
10% { opacity: 1; }
90% { opacity: 0.4; }
100% { transform: translateY(-80px) translateX(20px); opacity: 0; }
}
/* ── HUD top bar ── */
#hud {
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
padding: 10px 24px 8px;
background: linear-gradient(180deg, rgba(13,10,7,0.97) 0%, transparent 100%);
border-bottom: 1px solid rgba(61,45,10,0.5);
display: flex; align-items: center; justify-content: space-between; gap: 16px;
}
.hud-title {
font-family: 'Rye', serif; color: var(--gold);
font-size: 20px; letter-spacing: 4px;
text-shadow: 0 0 20px rgba(212,160,23,0.5);
flex-shrink: 0;
}
.hud-right { display: flex; align-items: center; gap: 24px; }
.hud-stat { text-align: center; }
.hud-stat-label {
color: var(--gold-dim); font-size: 11px;
letter-spacing: 3px; text-transform: uppercase;
display: block; margin-bottom: 3px;
}
.hud-stat-val { color: var(--gold); font-size: 24px; line-height: 1; }
/* Enemy pips */
#enemy-pips { display: flex; gap: 6px; align-items: center; }
.pip {
width: 10px; height: 10px; border-radius: 50%;
background: #ff4422; box-shadow: 0 0 6px #ff2200; transition: all 0.3s;
}
.pip.dead { background: #3d2d0a; box-shadow: none; }
/* ── Timer widget (bottom right) ── */
#timer-wrap {
position: fixed; bottom: 48px; right: 24px; z-index: 101;
width: 180px;
background: rgba(13,10,7,0.85);
border: 1px solid rgba(139,105,20,0.6);
padding: 7px 12px 8px;
backdrop-filter: blur(4px);
}
#timer-wrap-label {
color: var(--gold-dim); font-size: 9px; letter-spacing: 3px;
text-transform: uppercase; display: flex; justify-content: space-between;
margin-bottom: 5px;
}
#timer-wrap-label #time-val-outer { color: var(--gold); font-size: 13px; font-family: 'Special Elite', serif; }
#timer-bar-bg {
height: 6px; background: #1a1208; border-radius: 2px; overflow: hidden;
}
#timer-bar {
height: 100%; width: 100%; border-radius: 2px;
background: linear-gradient(90deg, var(--blood), #f5a623, #f5c842);
transform-origin: left;
transition: width 0.25s linear;
}
#timer-bar.urgent { background: linear-gradient(90deg, #5a0000, var(--blood)); }
/* ── Countdown number (big center flash) ── */
#countdown-flash {
position: fixed; inset: 0; z-index: 600;
display: flex; align-items: center; justify-content: center;
pointer-events: none; opacity: 0;
}
#countdown-flash span {
font-family: 'Rye', serif; font-size: 160px;
color: var(--gold); text-shadow: 0 0 60px rgba(212,160,23,0.7);
line-height: 1;
}
#countdown-flash.show { animation: cflash 0.6s ease-out forwards; }
@keyframes cflash {
0% { opacity: 1; transform: scale(1.4); }
60% { opacity: 0.7; transform: scale(1); }
100% { opacity: 0; transform: scale(0.9); }
}
/* ── Enemy ── */
.enemy {
position: absolute;
transform: translate(-50%, -100%);
cursor: none; z-index: 10;
animation: enemyAppear 0.3s ease-out both;
user-select: none;
}
@keyframes enemyAppear {
from { transform: translate(-50%, -70%); opacity: 0; }
to { transform: translate(-50%, -100%); opacity: 1; }
}
.enemy:hover .enemy-svg { filter: drop-shadow(0 0 10px rgba(255,68,34,0.9)); }
.enemy-svg {
display: block;
filter: drop-shadow(0 0 4px rgba(200,100,50,0.2));
}
.eye { animation: eyepulse 1.4s ease-in-out infinite alternate; }
@keyframes eyepulse {
from { opacity: 0.5; }
to { opacity: 1; filter: drop-shadow(0 0 3px #ff2200); }
}
.enemy.dying {
animation: enemyDie 0.5s ease-out forwards;
pointer-events: none;
}
@keyframes enemyDie {
0% { transform: translate(-50%, -100%) rotate(0deg); opacity: 1; }
40% { transform: translate(-50%, -90%) rotate(-15deg); opacity: 0.8; }
100% { transform: translate(-50%, -60%) rotate(-40deg); opacity: 0; }
}
.enemy.scared { animation: enemyScared 0.3s ease both; }
@keyframes enemyScared {
0%,100% { transform: translate(-50%, -100%); }
33% { transform: translate(calc(-50% - 5px), -100%) rotate(-4deg); }
66% { transform: translate(calc(-50% + 5px), -100%) rotate(4deg); }
}
/* ── Muzzle flash ── */
#muzzle-flash {
position: fixed; inset: 0;
pointer-events: none; z-index: 500; opacity: 0;
}
#muzzle-flash.flash { animation: mflash 0.12s ease-out forwards; }
@keyframes mflash {
0% { opacity: 1; background: radial-gradient(circle at var(--fx,50%) var(--fy,50%), rgba(255,220,100,0.45) 0%, transparent 40%); }
100% { opacity: 0; }
}
/* ── Impact text ── */
.impact {
position: fixed; pointer-events: none; z-index: 200;
transform: translate(-50%, -50%);
animation: impactanim 0.55s ease-out forwards;
}
@keyframes impactanim {
0% { opacity: 1; transform: translate(-50%,-50%) scale(0.5); }
50% { opacity: 1; transform: translate(-50%,-50%) scale(1.2); }
100% { opacity: 0; transform: translate(-50%,-70%) scale(1.4); }
}
.impact-hit { color: #f5c842; font-size: 22px; font-family: 'Rye', serif; text-shadow: 0 0 10px rgba(245,200,66,0.8); }
.impact-miss { color: #5a3d10; font-size: 15px; font-family: 'Special Elite', serif; letter-spacing: 2px; }
/* ── Bullet holes ── */
.bullet-hole {
position: fixed; width: 10px; height: 10px; border-radius: 50%;
transform: translate(-50%, -50%);
background: radial-gradient(circle, #0d0a07 30%, #2a1208 70%, #3d2d0a 100%);
border: 1px solid #5a3d10;
box-shadow: 0 0 6px rgba(0,0,0,0.8), inset 0 1px 2px rgba(0,0,0,0.9);
pointer-events: none; z-index: 50;
animation: holein 0.15s ease-out both;
}
@keyframes holein {
from { transform: translate(-50%,-50%) scale(0); }
to { transform: translate(-50%,-50%) scale(1); }
}
/* ── Bottom bar ── */
#bottom-bar {
position: fixed; bottom: 0; left: 0; right: 0; z-index: 100;
padding: 10px 24px;
background: linear-gradient(0deg, rgba(13,10,7,0.98) 0%, transparent 100%);
border-top: 1px solid rgba(61,45,10,0.5);
display: flex; align-items: center; justify-content: space-between;
}
.acc-wrap { flex: 1; max-width: 260px; }
.acc-label {
color: var(--gold-dim); font-size: 9px; letter-spacing: 3px;
text-transform: uppercase; margin-bottom: 4px;
display: flex; justify-content: space-between;
}
.acc-label span { color: #7aaa55; }
.acc-bar-bg {
height: 6px; background: #2a1f0d; border: 1px solid #5a3d10; border-radius: 2px; overflow: hidden;
}
#acc-bar-fill {
height: 100%; border-radius: 2px;
background: linear-gradient(90deg, var(--blood), #f5c842, #7aaa55);
}
.instruct { color: #5a4015; font-size: 11px; letter-spacing: 2px; }
/* ── Result overlay ── */
#result-overlay {
position: fixed; inset: 0; z-index: 1000;
display: flex; align-items: center; justify-content: center;
background: rgba(0,0,0,0); opacity: 0; pointer-events: none;
transition: background 0.5s, opacity 0.5s; text-align: center;
}
#result-overlay.visible {
opacity: 1; pointer-events: all; background: rgba(0,0,0,0.9);
}
.result-card {
border: 2px solid var(--gold-dim); background: var(--panel);
padding: 40px 56px; position: relative; max-width: 440px; width: 90%;
transform: translateY(20px); transition: transform 0.4s 0.1s ease;
}
#result-overlay.visible .result-card { transform: translateY(0); }
.result-card::before { content: '✦'; position: absolute; top: 10px; left: 14px; color: var(--gold-dim); font-size: 18px; }
.result-card::after { content: '✦'; position: absolute; bottom: 10px; right: 14px; color: var(--gold-dim); font-size: 18px; }
.result-title { font-family: 'Rye', serif; font-size: 42px; letter-spacing: 3px; margin-bottom: 6px; }
.result-title.win { color: #f5c842; text-shadow: 0 0 30px rgba(245,200,66,0.6); }
.result-title.lose { color: var(--blood); text-shadow: 0 0 30px rgba(200,54,12,0.6); }
.result-divider { width: 80px; height: 2px; background: var(--gold-dim); margin: 14px auto; }
.result-desc { color: #9a8060; font-size: 13px; letter-spacing: 1px; line-height: 1.7; margin-bottom: 14px; }
.result-stats { display: flex; gap: 20px; justify-content: center; margin-bottom: 24px; }
.rstat { text-align: center; }
.rstat-label { color: #5a4015; font-size: 9px; letter-spacing: 2px; text-transform: uppercase; display: block; margin-bottom: 3px; }
.rstat-val { color: var(--gold); font-size: 20px; }
.continue-btn {
padding: 12px 40px; border: 2px solid var(--gold-dim); background: transparent;
color: var(--gold); font-family: 'Special Elite', serif;
font-size: 13px; letter-spacing: 4px; text-transform: uppercase;
cursor: pointer; transition: all 0.15s;
}
.continue-btn:hover { background: var(--gold-dim); color: var(--dark); }
</style>
</head>
<body>
<div id="cursor">
<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
<circle class="cur-ring" cx="24" cy="24" r="18" stroke="#d4a017" stroke-width="1.5" fill="none"/>
<circle class="cur-ring" cx="24" cy="24" r="10" stroke="#d4a017" stroke-width="1" fill="none" stroke-dasharray="3 3" opacity="0.6"/>
<circle cx="24" cy="24" r="2" fill="#d4a017"/>
<line class="cur-lines" x1="24" y1="0" x2="24" y2="10" stroke="#d4a017" stroke-width="1.5"/>
<line class="cur-lines" x1="24" y1="38" x2="24" y2="48" stroke="#d4a017" stroke-width="1.5"/>
<line class="cur-lines" x1="0" y1="24" x2="10" y2="24" stroke="#d4a017" stroke-width="1.5"/>
<line class="cur-lines" x1="38" y1="24" x2="48" y2="24" stroke="#d4a017" stroke-width="1.5"/>
</svg>
</div>
<div id="muzzle-flash"></div>
<div id="arena"><div class="vignette"></div></div>
<div id="hud">
<div class="hud-title">✦ DRAW! ✦</div>
<div class="hud-right">
<div class="hud-stat">
<span class="hud-stat-label">Enemies</span>
<div id="enemy-pips"></div>
</div>
<div class="hud-stat">
<span class="hud-stat-label">Shot Accuracy</span>
<span class="hud-stat-val" id="remaining-val">—</span>
</div>
<div class="hud-stat">
<span class="hud-stat-label">Time</span>
<span class="hud-stat-val" id="time-val">—</span>
</div>
<div class="hud-stat">
<span class="hud-stat-label">Hits</span>
<span class="hud-stat-val" id="hits-val">0</span>
</div>
</div>
</div>
<div id="timer-wrap">
<div id="timer-wrap-label">
<span>⏱ Time</span>
<span id="time-val-outer">—</span>
</div>
<div id="timer-bar-bg"><div id="timer-bar"></div></div>
</div>
<div id="countdown-flash"><span id="countdown-num"></span></div>
<div id="bottom-bar">
<div class="acc-wrap">
<div class="acc-label">Hit chance <span id="acc-pct-label">—</span></div>
<div class="acc-bar-bg"><div id="acc-bar-fill" style="width:0%"></div></div>
</div>
<div class="instruct">CLICK ENEMIES TO SHOOT</div>
</div>
<div id="result-overlay">
<div class="result-card">
<div class="result-title" id="result-title"></div>
<div class="result-divider"></div>
<div class="result-desc" id="result-desc"></div>
<div class="result-stats">
<div class="rstat"><span class="rstat-label">Shots fired</span><span class="rstat-val" id="r-shots">0</span></div>
<div class="rstat"><span class="rstat-label">Accuracy</span> <span class="rstat-val" id="r-hits">0%</span></div>
<div class="rstat"><span class="rstat-label">Time left</span> <span class="rstat-val" id="r-time">0s</span></div>
</div>
<button class="continue-btn" onclick="handleContinue()">Continue →</button>
</div>
</div>
<script>
(function() {
// ═══════════════════════════════════════════════════════════════
// CONFIG — reads from SugarCube story variables.
// Set these before entering the passage:
// <<set $GunAccuracy to 60>> ← hit chance % (0–100)
// <<set $GunEnemyCount to 3>> ← number of enemies
// <<set $GunTimeLimit to 15>> ← seconds on the clock
//
// The fallback values below are used ONLY if the variable
// isn't defined (e.g. while previewing the file standalone).
// ═══════════════════════════════════════════════════════════════
function getSV(name, fallback) {
try {
// SugarCube exposes story variables on State.variables
var v = window.SugarCube
? window.SugarCube.State.variables[name]
: (window.State ? window.State.variables[name] : undefined);
return (v !== undefined && v !== null) ? v : fallback;
} catch(e) {
return fallback;
}
}
const Accuracy = getSV('GunAccuracy', 60); // %
const EnemyCount = getSV('GunEnemyCount', 3); // count
const TimeLimit = getSV('GunTimeLimit', 15); // seconds
// ═══════════════════════════════════════════════════════════════
// CONSTANTS
// ═══════════════════════════════════════════════════════════════
const ENEMY_W = 90;
const REPOSITION_INTERVAL = 3500;
const REPOSITION_VARIANCE = 0.6;
// ═══════════════════════════════════════════════════════════════
// STATE
// ═══════════════════════════════════════════════════════════════
let enemies = [];
let shotsFired = 0;
let hitsLanded = 0;
let gameActive = false;
let gameResult = null; // 'win' | 'lose'
let timeRemaining = TimeLimit;
let timerInterval = null;
const arena = document.getElementById('arena');
const cursor = document.getElementById('cursor');
const flash = document.getElementById('muzzle-flash');
const overlay = document.getElementById('result-overlay');
const timerBar = document.getElementById('timer-bar');
const timeVal = document.getElementById('time-val');
const timeValOuter = document.getElementById('time-val-outer');
// ═══════════════════════════════════════════════════════════════
// CURSOR
// ═══════════════════════════════════════════════════════════════
document.addEventListener('mousemove', e => {
cursor.style.left = e.clientX + 'px';
cursor.style.top = e.clientY + 'px';
});
document.addEventListener('mouseleave', () => cursor.style.opacity = '0');
document.addEventListener('mouseenter', () => cursor.style.opacity = '1');
// ═══════════════════════════════════════════════════════════════
// DUST PARTICLES
// ═══════════════════════════════════════════════════════════════
function spawnDust() {
for (var i = 0; i < 18; i++) {
var d = document.createElement('div');
d.className = 'dust';
var size = 2 + Math.random() * 5;
d.style.cssText =
'width:' + size + 'px;height:' + size + 'px;' +
'left:' + (Math.random()*100) + '%;' +
'bottom:' + (80 + Math.random()*80) + 'px;' +
'animation-duration:' + (5 + Math.random()*8) + 's;' +
'animation-delay:-' + (Math.random()*10) + 's;';
arena.appendChild(d);
}
}
// ═══════════════════════════════════════════════════════════════
// ENEMY SVG
// ═══════════════════════════════════════════════════════════════
function buildEnemySVG(id) {
var hats = ['#1a1208','#2a1208','#1f1a10'];
var coats = ['#1a1208','#12100a','#201810'];
var h = hats[id % 3], c = coats[id % 3];
var H = Math.round(ENEMY_W * 1.45);
return '<svg class="enemy-svg" width="' + ENEMY_W + '" height="' + H + '" viewBox="0 0 90 130" xmlns="http://www.w3.org/2000/svg">' +
'<rect x="23" y="4" width="44" height="9" rx="2" fill="'+h+'" stroke="#8b6914" stroke-width="1"/>' +
'<rect x="29" y="1" width="32" height="8" rx="2" fill="'+h+'" stroke="#8b6914" stroke-width="1"/>' +
'<ellipse cx="45" cy="29" rx="15" ry="17" fill="#3d2b15" stroke="#6b4c20" stroke-width="1.5"/>' +
'<circle class="eye" cx="39" cy="26" r="3.5" fill="#1a1208"/>' +
'<circle class="eye" cx="51" cy="26" r="3.5" fill="#1a1208"/>' +
'<circle cx="40" cy="26" r="1.5" fill="#cc2200" opacity="0.9"/>' +
'<circle cx="52" cy="26" r="1.5" fill="#cc2200" opacity="0.9"/>' +
'<path d="M38 35 Q45 39 52 35" stroke="#5a3d1a" stroke-width="1.5" fill="none"/>' +
'<path d="M22 46 L25 101 L65 101 L68 46 Q55 56 45 53 Q35 56 22 46Z" fill="'+c+'" stroke="#3d2d0a" stroke-width="1"/>' +
'<path d="M32 49 L38 71 L45 66 L52 71 L58 49 Q52 59 45 56 Q38 59 32 49Z" fill="#2a1f0d" stroke="#5a3d10" stroke-width="0.5"/>' +
'<rect x="28" y="83" width="34" height="6" rx="1" fill="#3d2d0a" stroke="#8b6914" stroke-width="1"/>' +
'<rect x="43" y="83" width="6" height="6" fill="#8b6914"/>' +
'<path d="M22 49 L10 76 L18 78 L28 56Z" fill="'+c+'" stroke="#3d2d0a" stroke-width="1"/>' +
'<rect x="1" y="69" width="18" height="5" rx="1" fill="#5a3d10" stroke="#8b6914" stroke-width="0.8"/>' +
'<rect x="12" y="66" width="5" height="8" rx="1" fill="#3d2d0a" stroke="#8b6914" stroke-width="0.8"/>' +
'<path d="M68 49 L80 73 L72 75 L62 56Z" fill="'+c+'" stroke="#3d2d0a" stroke-width="1"/>' +
'<rect x="28" y="99" width="14" height="18" rx="2" fill="#2a1208" stroke="#3d2d0a" stroke-width="1"/>' +
'<rect x="48" y="99" width="14" height="18" rx="2" fill="#2a1208" stroke="#3d2d0a" stroke-width="1"/>' +
'<line x1="28" y1="115" x2="20" y2="117" stroke="#8b6914" stroke-width="1"/>' +
'<line x1="62" y1="115" x2="70" y2="117" stroke="#8b6914" stroke-width="1"/>' +
'</svg>';
}
// ═══════════════════════════════════════════════════════════════
// POSITIONS
// ═══════════════════════════════════════════════════════════════
function randomPos() {
var mx = 80, top = 80, bot = 140;
return {
x: mx + Math.random() * (window.innerWidth - mx * 2),
y: top + Math.random() * (window.innerHeight - top - bot)
};
}
function safePos(existing) {
var MIN = 130;
for (var attempt = 0; attempt < 30; attempt++) {
var p = randomPos(), ok = true;
for (var i = 0; i < existing.length; i++) {
var dx = existing[i].x - p.x, dy = existing[i].y - p.y;
if (Math.sqrt(dx*dx + dy*dy) < MIN) { ok = false; break; }
}
if (ok) return p;
}
return randomPos();
}
// ═══════════════════════════════════════════════════════════════
// SPAWN
// ═══════════════════════════════════════════════════════════════
function spawnEnemies() {
for (var i = 0; i < EnemyCount; i++) {
(function(idx) {
var pos = safePos(enemies);
var el = document.createElement('div');
el.className = 'enemy';
el.innerHTML = buildEnemySVG(idx);
el.style.left = pos.x + 'px';
el.style.top = pos.y + 'px';
el.style.animationDelay = (idx * 0.12) + 's';
var enemy = { id: idx, el: el, x: pos.x, y: pos.y, alive: true };
el.addEventListener('click', function(e) { e.stopPropagation(); onEnemyClick(enemy); });
el.addEventListener('mouseenter', function() { cursor.classList.add('on-enemy'); });
el.addEventListener('mouseleave', function() { cursor.classList.remove('on-enemy'); });
arena.appendChild(el);
enemies.push(enemy);
scheduleReposition(enemy);
})(i);
}
updateHUD();
}
// ═══════════════════════════════════════════════════════════════
// REPOSITION
// ═══════════════════════════════════════════════════════════════
function scheduleReposition(enemy) {
if (!enemy.alive) return;
var delay = REPOSITION_INTERVAL * (0.5 + Math.random() * REPOSITION_VARIANCE);
enemy.repoTimer = setTimeout(function() {
if (!enemy.alive || !gameActive) return;
var pos = safePos(enemies.filter(function(e) { return e !== enemy; }));
enemy.x = pos.x; enemy.y = pos.y;
enemy.el.style.transition = 'left 0.6s ease-in-out, top 0.6s ease-in-out';
enemy.el.style.left = pos.x + 'px';
enemy.el.style.top = pos.y + 'px';
setTimeout(function() { if (enemy.el) enemy.el.style.transition = ''; }, 700);
scheduleReposition(enemy);
}, delay);
}
// ═══════════════════════════════════════════════════════════════
// SHOOT
// ═══════════════════════════════════════════════════════════════
function onEnemyClick(enemy) {
if (!gameActive || !enemy.alive) return;
var roll = Math.floor(Math.random() * 101);
var hit = (Accuracy >= roll);
shotsFired++;
fireFlash();
if (hit) {
hitsLanded++;
enemy.alive = false;
clearTimeout(enemy.repoTimer);
enemy.el.classList.remove('scared');
enemy.el.classList.add('dying');
cursor.classList.remove('on-enemy');
showImpact(enemy.x, enemy.y - 60, true);
spawnBulletHole(enemy.x + (Math.random()-0.5)*20, enemy.y - 60 - Math.random()*30);
setTimeout(function() { if (enemy.el) enemy.el.remove(); checkWin(); }, 500);
} else {
enemy.el.classList.remove('scared');
void enemy.el.offsetWidth;
enemy.el.classList.add('scared');
showImpact(enemy.x + (Math.random()-0.5)*80, enemy.y - 40, false);
spawnBulletHole(enemy.x + (Math.random()-0.5)*60 + 40, enemy.y - Math.random()*80);
}
updateHUD();
}
// Miss on empty arena click
arena.addEventListener('click', function(e) {
if (!gameActive) return;
shotsFired++;
fireFlash();
showImpact(e.clientX, e.clientY, false);
spawnBulletHole(e.clientX, e.clientY);
updateHUD();
});
// ═══════════════════════════════════════════════════════════════
// FX
// ═══════════════════════════════════════════════════════════════
function fireFlash() {
cursor.classList.add('firing');
setTimeout(function() { cursor.classList.remove('firing'); }, 80);
flash.style.setProperty('--fx', (parseInt(cursor.style.left) / window.innerWidth * 100) + '%');
flash.style.setProperty('--fy', (parseInt(cursor.style.top) / window.innerHeight * 100) + '%');
flash.classList.remove('flash');
void flash.offsetWidth;
flash.classList.add('flash');
}
function showImpact(x, y, hit) {
var d = document.createElement('div');
d.className = 'impact ' + (hit ? 'impact-hit' : 'impact-miss');
d.textContent = hit ? '✦ HIT!' : 'miss';
d.style.left = x + 'px';
d.style.top = y + 'px';
document.body.appendChild(d);
setTimeout(function() { d.remove(); }, 600);
}
function spawnBulletHole(x, y) {
var h = document.createElement('div');
h.className = 'bullet-hole';
h.style.left = x + 'px';
h.style.top = y + 'px';
document.body.appendChild(h);
setTimeout(function() { h.style.transition = 'opacity 1s'; h.style.opacity = '0'; }, 4000);
setTimeout(function() { h.remove(); }, 5200);
}
// ═══════════════════════════════════════════════════════════════
// COUNTDOWN TIMER
// ═══════════════════════════════════════════════════════════════
function startTimer() {
timeRemaining = TimeLimit;
updateTimerDisplay();
timerInterval = setInterval(function() {
timeRemaining -= 0.1;
if (timeRemaining <= 0) {
timeRemaining = 0;
updateTimerDisplay();
clearInterval(timerInterval);
if (gameActive) {
gameActive = false;
gameResult = 'lose';
setTimeout(showResult, 300);
}
} else {
updateTimerDisplay();
// Flash countdown number at each whole second
var secs = Math.ceil(timeRemaining);
if (Math.abs(timeRemaining - secs) < 0.15 && secs <= 5 && secs >= 1) {
flashCountdown(secs);
}
}
}, 100);
}
function updateTimerDisplay() {
var s = Math.max(0, timeRemaining);
var pct = (s / TimeLimit) * 100;
timerBar.style.width = pct + '%';
var txt = s.toFixed(1) + 's';
timeVal.textContent = txt;
timeValOuter.textContent = txt;
if (pct < 30) {
timerBar.classList.add('urgent');
timeVal.style.color = '#c8360c';
timeValOuter.style.color = '#c8360c';
} else {
timerBar.classList.remove('urgent');
timeVal.style.color = '';
timeValOuter.style.color = '';
}
}
function flashCountdown(n) {
var el = document.getElementById('countdown-flash');
var num = document.getElementById('countdown-num');
num.textContent = n;
el.classList.remove('show');
void el.offsetWidth;
el.classList.add('show');
}
// ═══════════════════════════════════════════════════════════════
// HUD
// ═══════════════════════════════════════════════════════════════
function initHUD() {
document.getElementById('acc-pct-label').textContent = Accuracy + '%';
document.getElementById('acc-bar-fill').style.width = Accuracy + '%';
document.getElementById('remaining-val').textContent = '0%';
document.getElementById('time-val').textContent = TimeLimit + '.0s';
}
function updateHUD() {
var liveAcc = shotsFired > 0 ? Math.round(hitsLanded / shotsFired * 100) : 0;
document.getElementById('remaining-val').textContent = liveAcc + '%';
document.getElementById('hits-val').textContent = hitsLanded;
var pipsEl = document.getElementById('enemy-pips');
pipsEl.innerHTML = '';
enemies.forEach(function(e) {
var pip = document.createElement('div');
pip.className = 'pip' + (e.alive ? '' : ' dead');
pipsEl.appendChild(pip);
});
}
// ═══════════════════════════════════════════════════════════════
// WIN CHECK
// ═══════════════════════════════════════════════════════════════
function checkWin() {
if (enemies.every(function(e) { return !e.alive; })) {
gameActive = false;
gameResult = 'win';
clearInterval(timerInterval);
setTimeout(showResult, 400);
}
}
// ═══════════════════════════════════════════════════════════════
// RESULT SCREEN
// ═══════════════════════════════════════════════════════════════
function showResult() {
var win = gameResult === 'win';
var acc = shotsFired > 0 ? Math.round(hitsLanded / shotsFired * 100) : 0;
document.getElementById('result-title').textContent = win ? 'VICTORY!' : 'TIME\'S UP.';
document.getElementById('result-title').className = 'result-title ' + (win ? 'win' : 'lose');
document.getElementById('result-desc').textContent = win
? 'All ' + EnemyCount + ' outlaw' + (EnemyCount > 1 ? 's' : '') + ' down. You\'re still standing.'
: 'The clock ran out. They didn\'t.';
document.getElementById('r-shots').textContent = shotsFired;
document.getElementById('r-hits').textContent = acc + '%';
document.getElementById('r-time').textContent = win ? timeRemaining.toFixed(1) + 's' : '0.0s';
overlay.classList.add('visible');
}
// ═══════════════════════════════════════════════════════════════
// CONTINUE → SUGARCUBE NAVIGATION
// Win → $GunMiniGameStatus = 2
// Lose → $GunMiniGameStatus = 1
// Then always goes to passage: AfterMatch
// ═══════════════════════════════════════════════════════════════
function handleContinue() {
var acc = shotsFired > 0 ? Math.round(hitsLanded / shotsFired * 100) : 0;
try {
SugarCube.State.variables.GunMiniGameStatus = (gameResult === 'win') ? 2 : 1;
SugarCube.State.variables.GunMiniGameAccuracy = acc;
SugarCube.Engine.play('TruckHijackGunFightAfterMatch');
} catch(e) {
try {
State.variables.GunMiniGameStatus = (gameResult === 'win') ? 2 : 1;
State.variables.GunMiniGameAccuracy = acc;
Engine.play('TruckHijackGunFightAfterMatch');
} catch(e2) {
alert('Navigation error: ' + e2.message);
}
}
}
window.handleContinue = handleContinue;
// ═══════════════════════════════════════════════════════════════
// INIT
// ═══════════════════════════════════════════════════════════════
initHUD();
spawnDust();
setTimeout(function() {
gameActive = true;
spawnEnemies();
startTimer();
}, 400);
})();
</script>
</body>
</html><<nobr>><<if $GunMiniGameStatus == 2>>
<img src="img/various/bullseye.webp" width=50% style="display: block; margin: 0 auto;">
Bullseye!
@@.option-button;[[Continue|TruckHijackDefeatThug]]@@
<<else>>
<img src="img/various/deathbygun.webp" width=50% style="display: block; margin: 0 auto;">
You missed.
@@.option-button;[[Continue|BADEnding5Bundle1]]@@
<</if>><</nobr>>
<<if $GunMiniGameAccuracy >= 30 and $GunMiniGameAccuracy < 50>>
<<set $GunAccuracy += 1>>
<<elseif $GunMiniGameAccuracy >= 50 and $GunMiniGameAccuracy < 80>>
<<set $GunAccuracy += 2>>
<<elseif $GunMiniGameAccuracy >= 80 and $GunMiniGameAccuracy <= 100>>
<<set $GunAccuracy += 3>>
<<else>>
<<set $GunAccuracy += 0.5>>
<</if>>
<<set $GunMiniGameAccuracy = 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/route13/route13atnight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run setup.showNotification("Your accuracy has increased: " +$GunAccuracy +"%!")>>When the gunfire blurs and the smoke begins to thin. You can see Greg himself crouches by the cab, breathing hard. He’s alive. You approach the car, signaling for Greg to come out of the car. Greg stares at the wreckage and then at you, the smoke wreathing him.
<<dialogue $playerAvatar "You" "We still have work to do. And yours is to swim through that river">>
<<dialogue "img/character/greg/gregavatar.png" "Greg" "Fucking hell, man">>
<<dialogue $playerAvatar "You" "We still have work to do. And yours is to swim through that river">>
You pour gasoline on the bikes and set them on fire.
<<dialogue "img/character/greg/gregavatar.png" "Greg" "Right, fuck">>
Just in time, David rolls up in a tow truck. He kills the engine and hops down, face hard and hands already reaching for the safe.
<<dialogue "img/character/david/david.png" "David" "We have to be quick, the knocker must have heard the commotion by now">>
You move swiftly, boots crunching over glass and charred gravel, and together you work the chains. You thread it through the safe’s handles, lock it down tight, and hook it to the tow rig.
<<dialogue $playerAvatar "You" "Let’s go">>
The tow truck vanishes into the night.
@@.option-button;[[Chat with David|HidingJackCargo1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/route13/route13atnight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Pain exploded in your shoulder as the bullet tore through you, spinning you onto your back. David shouts your name.
<<dialogue "img/character/david/david.png" "David" "$PlayerInput!">>
You die while David is still fighting.
@@.option-button;[[END|BADEnding5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/route13/route13atnight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/dead1.png" width=100%>
Bad Ending 5: shot dead on duty.
<<button "Restart Game">>
<<run UI.restart()>>
<</button>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/route13/route13atnight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You walk the perimeter of the crime scene, scanning the area with a sharp eye. The desolate part of town is mostly quiet now. Your first instinct is to check for surveillance—any nearby cameras that might have caught something useful. You pace along the edge of the street, looking up at buildings, telephone poles, even distant security lights.
Nothing.
No street cameras, no business surveillance, no doorbell cams from nearby houses. Just empty roads, old warehouses, and abandoned lots. This part of town isn’t the kind of place that invests in security. If the killer knew that, he picked his spot well.
You need to find out where she was before she ended up here.
@@.option-button;[[Knock on doors|Case1 Knock on doors]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cctv.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<nobr>><<widget "checkPayday">>
<<set _weekInMs to 7 * 24 * 60 * 60 * 1000>>
/* Calculate how many weeks have passed since last check using GAME time */
<<set _timeDiff to $now - $LastPaydayCheck>>
<<set _weeksPassed to Math.floor(_timeDiff / _weekInMs)>>
<<if _weeksPassed > 0>>
/* Add money for each week passed */
<<set $MoneyInBank += (_weeksPassed * 2000)>>
/* Update last check time by the number of weeks processed */
<<set $LastPaydayCheck to new Date($LastPaydayCheck.getTime() + (_weeksPassed * _weekInMs))>>
<</if>>
<</widget>>
<<widget "addItem">>
<<set _name = $args[0]>>
<<set _image = $args[1]>>
<<set _description = $args[2]>>
<<set _details = $args[3]>>
<<set _type = $args[4]>>
<<set _price = $args[5]>>
<<set _quantity = $args[6]>>
<<if not $inventory[_name]>>
<<set $inventory[_name] = {
"image": _image,
"description": _description,
"effect": _effect,
"type": _type,
"price": _price,
"quantity": _quantity
}>>
<<else>>
<<set $inventory[_name].quantity += _quantity>>
<</if>>
<</widget>>
<<widget "useItem">>
<<set _name = $args[0]>>
<<set _amount = $args[1] || 1>>
<<if $inventory[_name] and $inventory[_name].quantity > 0>>
<<set $inventory[_name].quantity -= _amount>>
<<if $inventory[_name].quantity <= 0>>
<<run delete $inventory[_name]>>
<</if>>
<</if>>
<</widget>><</nobr>><img src="img/character/danni/dannidoggysex2.webp" width=100%>
You throw Danni on the bed; before she can gather herself, you drive your cock deeper into her from the back with each brutal thrust. The sensation borders on unbearable, her tender insides stretched to the limit by your girth.
<<dialogue "img/character/danni/dannisexavatar5.jpg" "Danni" "agh">>
Danni's entire world narrows to the feeling of your cock throbbing inside her. Her own orgasm crashes over her like a tidal wave, her body convulsing wildly as wave after wave of ecstasy courses through her veins.
As your hot seed spills deep within her, Danni's mind goes blank, consumed by the all-encompassing bliss of her release. She feels used, defiled, and yet somehow strangely satisfied.
<<dialogue "img/character/danni/dannisexavatar6.jpg" "Danni" "It's done...it's finally over">>
@@.option-button;[[Leave|DanniNightVisit3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Bank</div>
<<setPassageVariableMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
<<if $GabbieBanker == 1>>@@.option-button;[[Gabbie]]@@<</if>>
<<if $BankInvestigation1 == 1 && $Gabbie2 == 1 && $inventory["Purple Flask"] and $Charisma >= 7 and $Intelligence >= 7 and $energy >= 20>>
@@.option-button;<<link "Investigation">><<goto "BankInvestigation1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $BankInvestigation1 == 1 && $Gabbie2 == 1 && $inventory["Purple Flask"]>>
@@.option-button-disabled;Investigation • 💬 Charisma 7 • 🧠 Intelligence 7 • ⚡ Energy 20@@<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bank/bank.png][Bank]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if $BankHeist2 == 1 and $now < $JackMcMahonReleaseTime>>
<<goto "BankHeist5">>
<<elseif $BankHeist2 == 1 && $now >= $JackMcMahonReleaseTime>>
<<set $BankHeistFail2 = 1>><<goto "BadEnding6Bundle2">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/bankinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Congratulations...">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "...Or should we say, good luck?">>
<<dialogue "img/character/realsheriff/realsheriffavatar.png" "$PlayerInput" "I'll take both, thanks. I spent 10 years in Pennsylvania; this is my first day west">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "I thought the sheriff had to be elected">>
<<dialogue "img/character/realsheriff/realsheriffavatar.png" "$PlayerInput" "Usually, but under certain circumstances, the mayor can bring in a ringer... He and Sheriff Morgan hire me so. I'm looking forward to meeting them">>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "That would be quite a trick, since he died last Tuesday">>
<<dialogue "img/character/realsheriff/realsheriffavatar.png" "$PlayerInput" "Testicular cancer; thought he had more time">>
@@.option-button;[[Continue|Prologue16]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Hint Guide</h2>
<img src="img/guild/phoneguild.png" width=100%>
<strong>Contacts</strong>: Some events will require you to make or receive a phone call from other characters
<strong>Swindler</strong>: It’s a dating app where you can find your match. It’s currently in early access.
<strong>Sextok</strong>: It's just porn
<strong>Wallpapers</strong>: You start the game with the default wallpaper. Continue the girls’ storylines to unlock more wallpapers
<strong>Setting</strong>: You can change your name, manage sound settings, and save, load, or restart the game here.
<div class="location-banner">Construction Site</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/westside/westside.jpg][West Side]]>><</button>>
<div class="location-name"><b>West Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/casino/casinoinprogress.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Haunted house</div>
<<setPassageVariableMap>>
@@.option-button;[[Get inside|HauntedHouseLivingroom]]@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/northresidentarea/northresidentarea.jpg][North Residential Area]]>><</button>>
<div class="location-name"><b>North Residential Area</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhouse1.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Case 2: The Abandoned House Disturbance
<img src="img/location/hauntedhouse/hauntedhouse1.jpg" width=100%>
Incident: Multiple noise complaints and reports of missing pets near the abandoned house on the north side.
Details:
Over the past two weeks, the Bason Sheriff Department has received more than a dozen noise complaints originating from the abandoned property located at 1427 North Ridge Road. Witnesses report hearing strange sounds during late-night hours, including banging, dragging noises, and what some described as “animal-like cries.”
In addition to the disturbances, several residents in the surrounding area have reported missing pets—primarily cats and small dogs—believed to have disappeared near the vicinity of the abandoned house.
---------------------------------------------------------------------------------------------
<<if $Case2Solve == 1>>Case solved
<<link "Archive">><<useItem "Haunted House Case">><<goto $prevPassage>><<run $('.popup-overlay').remove()>><</link>><</if>>
<div class="location-banner">Haunted house</div>
<<setPassageVariableNoMap>>
@@.option-button;[[Go deeper|HauntedHouseKitchen]]@@
@@.option-button;[[Leave|Haunted House]] @@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhouselivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Nightclub Member Card</h2><img src="img/item/nightclubmembercard.png" width =100%>
<p><strong>Type:</strong> Card</p><p><strong>Full Description:</strong> Membership card to access the VIP area in the nightclub.</p>
<div class="location-banner">Nightclub</div>
<<setPassageVariableNoMap>>
@@.option-button;[[Gwen|GwenInNightclub]]@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/nightclub/viproom.jpg][NightclubInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if setup.isOpeningHours($now)>><<goto "Nightclub">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/viproom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Haunted house</div>
<<setPassageVariableNoMap>>
@@.option-button;[[Go deeper|HauntedHouseBathroom]]@@
@@.option-button;[[Leave|Haunted House]] @@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousekitchen.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Haunted house</div>
<<setPassageVariableNoMap>>
@@.option-button;[[Go deeper|HauntedHouseBedroom]]@@
@@.option-button;[[Leave|Haunted House]] @@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebathroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Haunted house</div>
<<setPassageVariableNoMap>>
@@.option-button;[[Go deeper|HauntedHouseBasement]]@@
@@.option-button;[[Leave|Haunted House]] @@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Haunted house</div>
<<setPassageVariableNoMap>>
<<if $SamsonFirstMeet == 0 && $AbandonedHouseInvestigation == 0>>
@@.option-button;[[Go deeper|HauntedHouseBasement1]]@@
<<else>>
@@.option-button;[[Go deeper|HauntedHouseBasement2]]@@
<</if>>
@@.option-button;[[Leave|Haunted House]] @@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Haunted house</div>
<<nobr>>
<img src="img/character/samson/samson1.png" width=100%>
<<set $prevPassage = passage()>>
<<if $hunger >= 259200000>>
<<set $MCStarve = 1 >>
<<goto "Patient Room">>
<</if>>
<<if $energy <= 0>>
<<goto "Pass Out">>
<</if>>
<<set $now to setup.changeDate($now, 'minutes', 5)>>
<<set $energy to Math.max($energy - 1, 0)>>
<<checkPayday>>
<</nobr>>
@@.option-button;[[Draw your gun|SamsonEncounter1]]@@
<<linkappend "Run">>
You can't run from this battle.
<</linkappend>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Haunted house</div>
<<setPassageVariableNoMap>>
<<if $SamsonFirstMeet == 2>>
@@.option-button;[[There is something inside|FrannyFirstMeet]]@@
<</if>>
<div class="styled-line"></div>
@@.option-button;[[Go deeper|HauntedHouseBasement3]]@@
@@.option-button;[[Leave|Haunted House]] @@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement2.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Haunted house</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
@@.option-button;[[Go deeper|HauntedHouseBasement4]]@@
@@.option-button;[[Leave|Haunted House]] @@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement3.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Haunted house</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
@@.option-button;[[Go deeper|HauntedHouseBasement4]]@@
@@.option-button;[[Leave|Haunted House]] @@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>A man steps out from the dark hallway — tall, built like a fighter, bare-chested despite the chill. His skin gleams with sweat, muscles coiled tight, black and silver hair hanging to his shoulders like a lion's mane. But it’s his eyes that freeze you: bright yellow, reflecting the beam of your light like a predator’s.
He tilts his head, studying you for half a second then bolts forward.
<img src="img/character/samson/samson1.png" width=100%>
Your instincts kick in. You draw your gun, level it fast.
<<dialogue $playerAvatar "You" "Freeze!">>
The man doesn’t stop. His footsteps pound closer, wild and heavy. The yellow in his eyes flares brighter in the dark.
You steady your aim, finger tightening on the trigger.
@@.option-button;[[Fight|SamsonEncounter2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/gwen/gwen1.jpg" width=100%>
Full Name: Gwen Parker
Actress's name: Jazlyn Ray
Age: 25
Birthplace: Scottsdale, Arizona, United States
Nationality: American
Ethnicity: Caucasian
Occupation: Escort / Prostitute
Appearance
Hair Color: Blonde
Eye Color: Blue
Height: 5'4" (162 cm) — Petite
Weight: 120 lbs (54 kg)
Body Type: Slim
Measurements: 32-25-34
Bra Size: 32D
Pubic Hair: Trimmed / Landing strip
Tattoos: Flower on back
Piercings: Navel
Character Overview
Occupation: Prostitute at the Chocolate Box Nightclub.
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<h2>Cheat Code Guide</h2>
<img src="img/guild/cheatcodeguild.png" width=100%>
<b>This feature can be accessed from the left sidebar</b>
<b>Enter a cheat code</b>
<<nobr>>
<div class="dialogue-box">
<img src="img/avatar/dev_avatar.png" class="dialogue-avatar" alt="Dev">
<div class="dialogue-content">
<div class="dialogue-speaker">Dev</div>
<div class="dialogue-text"><b>You can find cheat codes on my Patreon!</b></div>
</div>
</div>
<</nobr>><div class="location-banner">Nightclub</div>
<img src="img/character/gwen/gwen1.jpg" width=100%>
<<setPassageVariableNoMap>>
<<dialogue "img/character/gwen/gwenavatar1.jpg" "Gwen" "Daddy, what can I do for you?">><<nobr>>
<<if $MCMoney >=100>>
@@.option-button;[[Ask to spank her - $100|GwenNightclubSpanking]]@@
<<else>>
@@.option-button-disabled;Ask to spank her - $100@@
<</if>>
<<if $MCMoney >=500>>
@@.option-button;[[Ask to fondle her breast - $500|GwenNightclubFondling]]@@
<<else>>
@@.option-button-disabled;Ask to fondle her breast - $500@@
<</if>>
<<if $MCMoney >=1000>>
@@.option-button;[[Ask for footjob - $1000|GwenNightclubFootjob]]@@
<<else>>
@@.option-button-disabled;Ask for footjob - $1000@@
<</if>>
<<if $MCMoney >=1500>>
@@.option-button;[[Ask for paizuri - $1500|GwenNightclubPaizuri]]@@
<<else>>
@@.option-button-disabled;Ask for footjob - $1000@@
<</if>>
<<if $MCMoney >=1500>>
@@.option-button;[[Ask for blowjob - $2000|GwenNightclubBlowjob]]@@
<<else>>
@@.option-button-disabled;Ask for blowjob - $2000@@
<</if>>
<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/nightclub/viproom.jpg][VVIP Room]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if setup.isOpeningHours($now)>><<goto "Nightclub">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/sexchair1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Gwen's breath hitches as your skilled fingers continue to tease and stimulate her sensitive breast, coaxing forth a response she hadn't anticipated. A warmth begins to spread through her core, her chest rising and falling rapidly as she surrenders to the moment.
<img src="img/character/gwen/gwenfondling1.webp" width=100%>
<<dialogue "img/character/gwen/gwensexavatar3.jpg" "Gwen" "Please... don't stop, Daddy">>
Gwen gasps as your fingers press firmly against her cloth-covered breast, the thin fabric providing scant barrier between his touch and her sensitive nipples. The added layer intensifies the stimulation, making her nipples harden.
<<if $MCMoney >= 500>>
@@.option-button;[[Give her another $500|GwenNightclubFondling1]]@@
<</if>>
@@.option-button;[[End|GwenInNightclub]]@@
<<set $MCMoney -= 500>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/sexchair1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Gwen's breath catches as she begins to move her feet in slow, sensual circles against your cock. The softness of her feet, hot and slightly slick with precum, provides an intriguing lubrication. She experiments with different pressures and rhythms, learning what seems to elicit the most pleasurable responses from you
<<dialogue "img/character/gwen/gwensexavatar4.jpg" "Gwen" "My god! you are so big, Daddy">>
<img src="img/character/gwen/gwenfootjob.webp" width=100%>
<<dialogue $playerAvatar "You" "I'm near, girl">>
As your climax hits, Gwen watches in awe as your cock throbs and pulses, erupting in a torrent of hot, sticky semen that coats her feet and ankles. She gasps, feeling the first warm splashes land on her skin, followed by a steady stream that paints her toes a creamy white.
<<dialogue "img/character/gwen/gwensexavatar4.jpg" "Gwen" "Oh my god, look at all that cum">>
@@.option-button;[[End|GwenInNightclub]]@@
<<set $MCMoney -= 1000>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/sexchair1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
With a deep breath, Gwen lowers her breasts onto your lap, the soft mounds pressing against your thighs as she aligns her nipples with your arousal. Slowly, deliberately, she begins to move her chest in circular motions, using her breasts to stroke and caress your cock.
<<dialogue "img/character/gwen/gwensexavatar1.jpg" "Gwen" "Mmm, how does that feel, Daddy?">>
<img src="img/character/gwen/gwenpaizuri.webp" width=100%>
<<dialogue $playerAvatar "You" "I'm near, girl">>
At your warning, Gwen increases the tempo and pressure of her movements, determined to bring you to a swift and satisfying climax. She rocks her chest more urgently against your lap, her nipples dragging along the length of your cock with each passing second.
<<dialogue "img/character/gwen/gwensexavatar3.jpg" "Gwen" "Cum for me Daddy">>
Gwen feels the first warm splash of your cum against her breast. She gasps softly, her eyes widening in surprise at the intensity of the sensation. The liquid heat seeps into her skin, leaving a sticky trail in its wake. Tentatively, she brings her fingers to her lips, tasting the salty essence of your pleasure. The flavor is rich and masculine.
<<dialogue "img/character/gwen/gwensexavatar4.jpg" "Gwen" "Mmm, delicious">>
@@.option-button;[[End|GwenInNightclub]]@@
<<set $MCMoney -= 1500>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/sexchair1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Gwen cries out in surprise and pleasure as the cold ice makes contact with her heated skin, the contrast of temperatures sending a shiver down her spine. She gasps, her breath hitching in her throat as you continue to roll the ice across her sensitive breasts.
<img src="img/character/gwen/gwenfondling2.webp" width=100%>
The icy sensation seems to amplify the already heightened sensitivity of her nipples, making them throb with need.
<<dialogue "img/character/gwen/gwensexavatar3.jpg" "Gwen" "Ah, ah, ahh! Oh fuck, my nipples, that's... that's so mean, Daddy">>
Gwen's entire body tenses as the frigid ice makes direct contact with her engorged nipples, the sensation bordering on pain yet somehow heightening her pleasure to unbearable levels. She throws her head back, a hoarse cry tearing from her throat as the ice circles and teases the sensitive buds.
@@.option-button;[[End|GwenInNightclub]]@@
<<set $MCMoney -= 500>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/sexchair1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/gwen/gwenspanking.webp" width=100%>
<<dialogue "img/character/gwen/gwensexavatar2.jpg" "Gwen" "Ahh~">><
@@.option-button;[[End|GwenInNightclub]]@@
<<set $MCMoney -= 100>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/sexchair1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
As you tower over her, Gwen feels a rush of submission and desire. She looks up at you through her lashes, her mouth already busy working your cock, before focusing on the task at hand.
<<dialogue "img/character/gwen/gwensexavatar3.jpg" "Gwen" "Mmph... mmph... gggghhkkk...">>
<img src="img/character/gwen/gwenblowjob.webp" width=100%>
She takes you deeper, gagging slightly as your length stretches her throat. The slight discomfort only fuels her desire, and she relaxes her jaw, allowing you to hit the back of her mouth with each thrust.
<<dialogue $playerAvatar "You" "I'm near, girl">>
<<dialogue "img/character/gwen/gwensexavatar3.jpg" "Gwen" "Mmmph... ohhh...">>
With a guttural roar, your cock explodes, your hot seed flooding Gwen's mouth in thick, pulsing jets. She swallows rapidly, trying to keep up with the deluge, but some of your cum escapes, dribbling down her chin and neck.
<<dialogue "img/character/gwen/gwensexavatar3.jpg" "Gwen" "My stomach is full of your cum, Daddy">>
@@.option-button;[[End|GwenInNightclub]]@@
<<set $MCMoney -= 2000>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/sexchair1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<nobr>><<set $YourAccuracy to 0>>
<img src="img/character/samson/samson1.png" width=70% style="display: block; margin: 0 auto;">
<span id="your-accuracy">Your accuracy is $YourAccuracy%.</span>
@@.option-button;<<link "Aim">>
<<set $YourAccuracy to $YourAccuracy + 10>>
<<replace "#your-accuracy">>
Your accuracy is $YourAccuracy%.
<</replace>>
<</link>>@@
@@.option-button;<<link "Shoot">><<set $ShootStatus = 1>><</link>>@@
<<timed 3s>>
<<goto "SamsonEncounter3">>
<</timed>><</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<set $YourAccuracyMinimum = Math.floor(Math.random() * 101)>>
<<if $ShootStatus == 1 && $YourAccuracyMinimum <= $YourAccuracy>>
<img src="img/various/bullseye1.webp" width=100%>
Bullseye!
@@.option-button;[[Continue|SamsonEncounter4]]@@
<<else>>
<img src="img/various/dead1.png" width=100%>
You missed.
@@.option-button;[[Play again|SamsonEncounter1]]@@
<</if>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The man charges straight at you, a blur of muscle and fury. You fire once. The shot cracks through the hall, deafening in the tight space.
The bullet hits him square in the shoulder. You see it, the impact and the spray, but the man barely reacts. He just flinches, lets out a guttural snarl, and keeps coming.
You fire again. Another hit. Still nothing. His movements are raw, feral, like pain doesn’t register.
Then, just as suddenly as it started, he stops. The yellow in his eyes flickers, confusion or rage, and he backs away, breathing hard. You keep your aim steady, every muscle locked, watching him retreat a few steps into the dark.
For a moment, it feels like he might lunge again. Then he turns and bolts, crashing through a side door.
<<dialogue $playerAvatar "You" "Stop right there!">>
@@.option-button;[[Chase|SamsonEncounter5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You rush after him, heart pounding as his footsteps thunder down the stairs. The air in the basement is thick with dust and rot, the flashlight beam shaking in your hand as you chase the sound through the maze of concrete and broken shelves.
<<dialogue $playerAvatar "You" "This is not a warning! Stop!">>
@@.option-button;[[Chase|SamsonEncounter6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement2.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The man moves fast, too fast for someone hit twice. You catch flashes of him in the dark, the glint of yellow eyes ahead, the sound of his breath sharp and animal.
<<dialogue $playerAvatar "You" "...">>
@@.option-button;[[Chase|SamsonEncounter7]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement3.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>He reaches the far end of the basement, where the wall has caved in from years of decay. A massive pile of rubble blocks the way, jagged concrete and twisted rebar rising like a wall.
Without slowing down, he climbs. His bare hands find impossible holds, muscles coiling as he hauls himself upward. In seconds, he’s at the top, looking down at you through the dust.
You lift your gun again, but he’s already gone.
<<dialogue $playerAvatar "You" "That not a fucking human">>
@@.option-button;[[Leave|Haunted House]]@@
<<set $SamsonFirstMeet = 2>>
<<set $AbandonedHouseInvestigation = 1>>
<<run hideSidebar()>>
<<set $FrannyDeathTime to setup.changeDate($now, 'months', 1)>>
<<set $RiverbankCrazyManInvestigation = 1>>
<<set $EmmettTalk1 = 1>>
<<set $Case2Solve = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Down there, among the broken furniture and old crates, you spot movement, a small shape tucked in the corner.
You raise the light, and the beam finds it.
<<if $now <= $FrannyDeathTime>>
<img src="img/character/franny/franny1.png" width=100% style="filter: brightness(0.2);">
A girl, young, maybe early twenties, skin pale under the grime. Her auburn hair hangs in tangled strands over her face, streaked with dirt and dust. She’s barefoot, clothes torn, eyes wide but distant, like she’s been living inside a nightmare too long to wake from. A name tag near her says Franny.
<<dialogue $playerAvatar "You" "Hey, it’s okay. You’re safe now. I’m here to help. Franny? Is that your name?">>
<<dialogue "img/character/franny/frannyavatar.jpg" "Franny" ". . .">>
She doesn’t move. Doesn’t even flinch. Just stares past you, silent.
<<dialogue $playerAvatar "You" "Did he do this to you? The man?">>
<<dialogue "img/character/franny/frannyavatar.jpg" "Franny" ". . .">>
No answer. Only the faint tremble of her hands, clutching the hem of her shirt. You know that look, fear so deep it shuts the body down. You take off your jacket, drape it around her shoulders.
<<dialogue $playerAvatar "You" "Come on. Let’s get you out of here">>
She doesn’t resist when you help her to her feet. Step by step, you guide her through the wrecked house and into the cold night air. The place feels even emptier now, the silence heavier.
<<dialogue $playerAvatar "You" "Hang in there">>
@@.option-button;[[Get to the hospital|FrannyFirstMeet1]]@@
<<else>>
<img src="img/character/franny/franny0.png" width=100%>
A skeleton, lying flat and still, dust gathering in the gaps between its bones. It looks recent, maybe a month old, but stripped bare, as if time moved faster down here.
@@.option-button;[[Leave|HauntedHouseBasement2]]@@
<<set $SamsonFirstMeet = 3>>
<</if>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hauntedhouse/hauntedhousebasement2.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The hospital runs some tests on her. No drugs, no injuries, no sign of illness. Just hunger and exhaustion. So you take her to a diner, Rebecca's workplace.
The girl eats like she hasn’t seen food in days. When she’s done, she sits there, hands folded in her lap, staring at the window.
She doesn’t have any form of ID, no license, no fingerprints on record. The doctor mentioned that until her identity is determined, she remains under your care.
<<dialogue $playerAvatar "You" "Let's go, Franny">>
She stands, silent, following you without a word.
@@.option-button;[[Leave|Hospital]]@@
<<set $now to setup.changeDate($now, 'hours', 5)>>
<<set $FrannyCare = 1>>
<<set $CassieFrannyTalk = 1>>
<<run hideSidebar()>>
<<set $SamsonFirstMeet = 3>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/hospital.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run addWallpaper("img/character/franny/frannywallpaper1.jpg")>>
<<run setup.showNotification("📸New Wallpaper Unlocked!")>>
<<run setup.showNotification("💋New Character Unlocked: Franny!")>>
<<run updateGuideTextForStoryline("Franny", "Continue with Chapter 1. In the meantime, look after Franny, or…")>>
<<run updateGuideTextForStoryline("Cassie", "Visit Cassie at the Massage Parlor")>><div class="location-banner">Cell room</div>
<img src="img/character/others/suspect1.png" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
The suspect sits on the bench, elbows on his knees, fingers tapping restlessly against his leg, he doesn’t even look at you. He tries to look tough, but there’s a twitch in his eye, the kind of thing that gives away the fear underneath.
<<nobr>>
<<if $InterrogateSuspectCase1 == 1 and $Intelligence >= 3 and $energy >= 10>>
@@.option-button;[[Interrogate|InterrogateSuspectCase1]]@@
<<elseif $InterrogateSuspectCase1 == 1 and $Intelligence < 3>>
@@.option-button-disabled;Interrogate • 🧠 Intelligence 3 • ⚡ Energy 10@@<</if>>
@@.option-button;[[Leave|Cell 1]]@@<</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/cell.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Cell Room</div>
<img src="img/character/philip/philipinjail.png" width=100%>
<<setPassageVariableNoMap>>
Philip sits in the corner of the cell now, hunched forward, elbows resting on his knees. His fingers fidget, tapping against his leg, twitching like he’s itching for a cigarette, a drink—anything to calm his nerves. His foot taps against the floor in a rapid, anxious rhythm. When he finally speaks, his voice is quieter, weaker.
<<dialogue "img/character/philip/philipavatar.png" "Philip" "Please… I—I didn’t mean for any of this to happen…">>
<<if $Case1MurderCaught == 2>>
@@.option-button;[[Talk to Philip|InformPhilipTheNew]]@@
<</if>>
@@.option-button;[[Leave|Cell 3]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/cell.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You step into the holding area, where Philip Fabrizio is slumped on the bench inside his cell. His once-arrogant smirk is gone, replaced by a hollow, distant stare.
<<dialogue $playerAvatar "You" "Got some news for you. Your father’s dead">>
He barely reacts when you stop in front of the bars.
<<dialogue "img/character/philip/philipavatar.png" "Philip" "No. You’re lying">>
<<dialogue $playerAvatar "You" "You know what a dead fish in a package means, don’t you?">>
<<dialogue "img/character/philip/philipavatar.png" "Philip" "No, no, that’s not—">>
He shakes his head, gripping his own arms like they might hold him together.
But he knows. You can see it in his eyes. The moment it sinks in, the moment the reality of it crushes him. His breathing turns ragged, his body shaking as he curls up on the bench, pulling his knees to his chest like a scared little boy.
The arrogant, spoiled rich kid is gone. What’s left is just a scared man, stripped of everything.
You turn away. There’s nothing left to say. Philip Fabrizio will stand trial. With his father gone, there’s no one left to buy his way out. No one left to protect him.
The case is closed.
@@.option-button;[[Leave|Cell 3]]@@
<<set $Case1MurderCaught = 0>><<set $Case1Solve = 1>><<set $moral += 5>><<set $Reputation += 5>><<set $AbandonedHouseInvestigation = 0>>
<<set $Case1Suspect = 0>><<set $Case1SuspectRelease = 1>>
<<set $MaryFirstMeet = 1>><<set $unlockedCharacters.mary = true>>
<<run hideSidebar()>>
<<run setup.showNotification("Your reputation has risen")>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/cell.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to the Massage Palor")>>
<<run updateGuideTextForStoryline("Riley", "Talk to Riley at her desk")>>
<<run updateGuideTextForStoryline("Selena", "Talk to Selena at her desk")>>
<<run setup.showNotification("💋New Character Unlocked: Mary!")>>
<<if $HaleyFirstMeet == 1>>
<<run updateGuideTextForStoryline("Mary", "Continue with Haley guide")>>
<<else>>
<<run updateGuideTextForStoryline("Mary", "Mary is in the school hallway in the morning")>>
<</if>>
<div class="location-banner">Sheriff Office</div>
<img src="img/various/pcscreen1.png" width=70% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
<<nobr>>
<<if $AbandonedHouseInvestigation == 0 && !$HauntedHouseCaseFile and $Intelligence >= 5 and>>
@@.option-button;<<link "Receive new case">><<addItem "Haunted House Case" "img/location/hauntedhouse/hauntedhouse1.jpg" "Murder case file." "Haunted House Case" "File" 5 1>><<set $HauntedHouseCaseFile = 1>><<goto "Case files">><</link>>@@
<<elseif $AbandonedHouseInvestigation == 1 && !$HauntedHouseCaseFile and $Intelligence < 5>>
@@.option-button-disabled;Receive new case • 🧠 Intelligence 5@@
<</if>>
<<if $RiverbankCrazyManInvestigation == 1 && !$RiverbankRVCaseFile and $Intelligence >= 5>>
@@.option-button;<<link "Receive new case">><<addItem "Riverbank RV Case" "img/location/emmetthouse/emmetthouse.png" "Murder case file." "RV Case" "File" 5 1>><<set $RiverbankRVCaseFile = 1>><<goto "Case files">><</link>>@@
<<elseif $RiverbankCrazyManInvestigation == 1 && !$RiverbankRVCaseFile and $Intelligence < 5>>
@@.option-button-disabled;Receive new case • 🧠 Intelligence 5@@
<</if>>
<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/sheriffoffice.png][SheriffOffice]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><b>Current location: North Side</b>
<img src="img/location/northside/antiqueshop.png" width=100%>
<<setPassageVariableNoMap>>
The air smells of dust and old varnish, shelves packed tight with trinkets and relics from every supposed era. You pick up a brass compass—light, hollow, plastic under the paint. A fake. So are the swords, the clocks, even the porcelain dolls staring from the back shelf. You set the compass down, glance once more around the room, and let out a quiet sigh before heading for the door.
<<if $Artifact2 == 1>>
Just as you’re about to leave, something catches your eye behind the glass counter — a jade bangle. Unlike the rest, it looks real. The faint green hue glows softly under the shop’s dim light, the surface smooth but marked with delicate engravings that seem almost ancient. You lean closer, tracing the symbols with your eyes.
The shopkeeper doesn’t even notice your interest, busy rearranging his fake treasures.
<<dialogue $playerAvatar "You" "How much for that one?">>
<<dialogue "img/character/others/antiqueshopowner.png" "Shopkeeper" "That old thing? Five grand">>
<<nobr>><<if $MCMoney >= 5000>>
[[Purchase|Artifact2Found]]
<<else>>
<span class="disabled-link">Purchase</span>
<</if>><</nobr>>
@@.option-button;[[Steal|Artifact2FoundSteal][$moral -= 5]]@@
<</if>>
@@.option-button;[[Leave|North Side]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/northside/antiqueshop.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<addItem "Jade Bangle" "img/item/artifact2.png" "A small jade bangle." "" "Artifact" 5000 1>>
<<set $Artifact2 = 0>><<set $MCMoney -= 5000>>
<<goto "North Side">><<addItem "Jade Bangle" "img/item/artifact2.png" "A small jade bangle." "" "Artifact" 5000 1>>
<<set $Artifact2 = 0>>
<<goto "North Side">>David keeps his eyes on the road as the tow truck rumbles down the dark highway, the cargo clanking behind.
<<dialogue $playerAvatar "You" "You sure you can handle this alone?">>
<<dialogue "img/character/david/david.png" "David" "I got it. Don’t worry, sir. I'll bury it under the grain in my old man's silo, just like we planned">>
<<dialogue $playerAvatar "You" "Alright, you can let me off here. Take care of yourself, David">>
<<dialogue "img/character/david/david.png" "David" "You too sir">>
@@.option-button;[[Return|HidingJackCargo2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/route13/route13atnight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<if setup.isOpeningHours($now)>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<goto "MarinaCall1Operator">>
<<else>>
<<goto "MarinaCall1">>
<</if>><img src="img/character/marlene/marlenereport1.png" width=100%>
Marlene spots you from across the scene and waves off her cameraman before walking over, heels crunching over bits of burnt gravel. Her press badge sways against her jacket, her tone somewhere between professional and playful.
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Good evening, deputies">>
<<dialogue $playerAvatar "You" "Marlene">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Hey Marlene, is David coming too?">>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Nah, I didn’t wake him, want me to call him?">>
<<dialogue $playerAvatar "You" "No, let him rest. We don’t need the whole department showing up">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Excuse me, I think Monroe found something. Let me go check it out">>
Selena joins the forensic team while you remain with Marlene
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "You promised me~ Let me take a few close-up pictures, sheriff">>
<<dialogue $playerAvatar "You" "That’s not exactly what I promised, Marlene">>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Come on. You know I won’t show anything that compromises your case. Just a few shots. My viewers will eat it up">>
You glance around — Selena is busy with the forensics team, Riley crouched near the wreck, taking her own photos. Marlene shouldn’t be anywhere near this close. But she knows too much, and keeping her happy might be easier than pushing her away right now.
<<dialogue $playerAvatar "You" "Fine. Five minutes. Stay behind the tape and don’t touch anything">>
<<dialogue "img/character/marlene/marleneavatar.jpg" "Marlene" "Good boy. Momma owe you one">>
You step aside as she starts snapping photos of the wreckage, every flash lighting up the truth you’re trying to bury.
@@.option-button;[[Wander around|BackToTheHijackSite2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/jacktruckhijackaftermatch.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/others/mcmahonthugs.png" width=100%>
As Marlene moves off to get her shots, you take a slow walk around the edge of the wreck. The crowd has started to thin, but something catches your eye, two men standing at the far end of the service road.
You stop, pretending to jot a note in your pad while your gaze flicks toward them again. They don’t talk to anyone, don’t take pictures, and don’t even move. Just watching. That’s gotta be Jack McMahon’s men, here to find out what happened to his truck.
They linger a minute longer, eyes sweeping over the wreck, then melt back into the crowd.
Other than that, nothing else happens that night. The fire dies down, the reporters pack up, and the last of the onlookers drift away into the dark. You stay until the wreck is cleared, giving orders, pretending to be just another cop doing his job.
@@.option-button;[[Go home|BackToTheHijackSite3]]@@
<<run hideSidebar()>>
<<set $energy to Math.min($energy - 1, 1)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/jacktruckhijackaftermatch.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/location/bar/winestorage.jpg" width=100%>
You’re too exhausted to go anywhere...
@@.option-button;[[Sleep|BackToTheHijackSite4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You fall onto the bed, exhaustion finally catching up with you. The town’s quiet, the kind of silence that seeps through the walls. It doesn’t take long before sleep pulls you under.
In the dream, she’s there — Carrie. The air feels warm, soft, unreal. She smiles the way she used to, her hand finding yours. The distance between you disappears, and everything else fades away. Her touch lingers, her breath close to your ear.
Her fabric falls open, revealing her big breast. They're a pale shade of pink, with perky nipples, inviting you to touch them
<img src="img/character/carrie/carriebreastfondling.webp" width=100%>
Carrie gasps sharply as your hands make contact with her sensitive breasts, sending jolts of pleasure through her voluptuous frame. Her back arches slightly, pressing her chest further into your touch.
<<dialogue "img/character/carrie/carriesexavatar4.jpg" "Carrie" "Ohhh... Honey...">>
Carrie's breathing quickens, and her nipples harden even more beneath your fingers, aching for more of your fondling. Trembling with excitement, she reaches out to grasp your wrists, guiding your hands to massage and squeeze her breasts more firmly. Carrie's hips shift restlessly on the bed, her core clenching with building arousal.
<<dialogue "img/character/carrie/carriesexavatar4.jpg" "Carrie" "Mmm… my turn now">>
@@.option-button;[[Brick up|BackToTheHijackSite4.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/starrynight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/marlene/marlenereport1.png" width=100%>
You run back to your place, the road empty except for the echo of your own thoughts. A quick shower, a clean shirt, and the badge goes back on. The reflection staring at you in the mirror looks like the sheriff again. You take a deep breath, holster your gun, and step out into the night.
By the time you reach the highway, the fire’s glow paints the sky orange. Flames still lick the edge of the wreck as you pull up. People crowd the scene—locals, firefighters, and of course Marlene, reporting live from the sidewalk. You spot Selena talking to Riley near the tape, their faces lit by the blaze.
You step under the police tape, flash your badge
<<dialogue $playerAvatar "You" "What happened?">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Explosion about <<print $McMahonHijack1.getHours() + ":" + $McMahonHijack1.getMinutes().toString().padStart(2, '0')>>. Truck took the blast. we came here as soon as we could, but there are casualties. We’re canvassing nearby houses for footage and talking to anyone who was on Route 13 few hours ago">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "It’s bad, Sheriff. Everything’s burned to a crisp… but from what I can tell, there were two cars, two motorbikes, and the truck">>
<<dialogue $playerAvatar "You" "You’re sure?">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "As sure as I can be. The frames match, and I’m pretty sure that’s a bike handle. My dad’s an auto mechanic, so this kind of thing’s a side hustle for me">>
<<dialogue $playerAvatar "You" "Alright. Keep digging">>
@@.option-button;[[Marlene|BackToTheHijackSite1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/jacktruckhijackaftermatch.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<if !$CarrieSexScene1>>
<<set $CarrieSexScene1 = 1>>
<<set $energy to Math.max($energy - 1, 100)>>
<<set $TruckHijack1 = 0>><<set $SquadRoomMeeting1 = 1>>
<<set $RissaThirdMeet = 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Meet the team in the squadroom")>>
<<run updateGuideTextForStoryline("Rissa", "Sneak into the warehouse at night")>>
<<goto "BackToTheHijackSite6">>
<<elseif $CarrieSexScene1 == 1>>
<<goto "Carrie Hint">>
<</if>>You walk into the squad room. Selena is perched on the edge of a desk, chatting with David.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "I can't believe you missed the hottest thing to happen in Bason in half a year">>
<<dialogue "img/character/david/david.png" "David" "Didn’t seem that hot to me">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "That so? You sure you’re not just jealous we got all the excitement while you were asleep?">>
<<dialogue "img/character/david/david.png" "David" "Nah, it just not that cool">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Not that cool? David, the damn highway was on fire. Half the town came out to watch!">>
<<dialogue "img/character/david/david.png" "David" "Guess I’m just not impressed">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "You get outta here">>
@@.option-button;[[Meeting time|SquadRoomMeeting2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Alright, break it up, guys. About last night’s explosion out on Route 13. I want everything we’ve got">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "According to the forensic team’s report, the entire scene was reduced to ash. A truck, an escort car, another unidentified vehicle, and two motorbikes were found. The bodies are burned so badly they can’t be identified, but there are bullet holes along the escort’s side">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "I knew it… Oh, sorry for interrupting">>
<<dialogue "img/character/david/david.png" "David" "We ran the plates that didn’t melt. The truck was registered under Jack McMahon Freight">>
<<dialogue $playerAvatar "You" "So someone hit Jack McMahon’s convoy? ">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "You think it’s gang-related?">>
<<dialogue $playerAvatar "You" "Maybe, I’ve been digging through the town’s history of violence. McMahon had a feud with that biker gang, didn’t he?">>
<<dialogue "img/character/david/david.png" "David" "Yes, sir. It got so bad folks wouldn’t even step outside">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Exactly. Those bikers are animals">>
<<dialogue $playerAvatar "You" "Alright. For now, we keep the town steady. No panic, no rumors. Our job is to make sure everyone stays safe while we figure out what really happened">>
<<dialogue "img/character/david/david.png" "David" "And McMahon?">>
<<dialogue $playerAvatar "You" "I’ll handle Jack. I’ll head over there myself and get his statement. Okay, everyone, back to work">>
@@.option-button;[[Leave|SquadRoom]]@@
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $SquadRoomMeeting1 = 0>>
<<run hideSidebar()>>
<<set $McMahonHouseVisit = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to Jack McMahon's mansion, can only be access through the map, Spade symbol")>><h2>Jade Bangle</h2><img src="img/item/artifact2.png" width =100%>
<p><strong>Type:</strong> Artifact</p><p><strong>Full Description:</strong> Unknown</p>
<div class="location-banner">Spade Mansion</div>
<<setPassageVariableMap>>
<<nobr>><<if setup.isNight($now)>>
<<if $MarinaRescue == 1 and $Intelligence >= 9 and $Endurance >= 9 and $Strength >= 9 and $energy >= 30>>
@@.option-button;<<link "Break in">><<goto "MarinaRescue1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $MarinaRescue == 1>>
@@.option-button-disabled;Break in • 🧠 Intelligence 9 • 🛡️ Endurance 9 • 💪 Strength 9 •⚡ Energy 30@@<</if>><</if>>
<<if $McMahonHouseVisit == 1>>
@@.option-button;[[Doorbell|McMahonHouseVisit1]]@@<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/northside/northside.png][North Side]]>><</button>>
<div class="location-name"><b>North Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionfrontgate.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Jack McMahon’s mansion looms ahead like a block of concrete power — all sharp edges and cold glass, a brutalist fortress that looks more like a statement than a home.
When you ring the doorbell, the chime echoes deep inside before the heavy door swings open. A man in a black suit greets you.
<<dialogue "img/character/others/mcmahonthug1.png" "???" "Sheriff, Mr. McMahon was expecting you">>
You give a slow nod. He leads you through the wide hallways. Concrete walls, expensive art. Every sound you make bounces off the hard surfaces. Finally, he stops at a set of tall glass doors and opens them into a living room the size of a small house.
<<dialogue "img/character/others/mcmahonthug1.png" "???" "Mr. McMahon will be with you shortly. Would you like something to drink while you wait, sir?">>
You glance toward the glass bar by the wall, bottles of whiskey and scotch lined like soldiers
<<dialogue $playerAvatar "You" "You got any Diet Coke?">>
<<dialogue "img/character/others/mcmahonthug1.png" "???" "Of course">>
A few moments later, he returns with a chilled can and a single glass set neatly on a coaster.
@@.option-button;[[Wait|McMahonHouseVisit2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/marina/marinapool.webp" width=100%>
You turn toward the tall glass window. Outside, Jack McMahon and Marina are sitting in the pool, close together near the edge. The water glimmers around them, catching the gray light of the sky. Jack’s posture is relaxed, one arm draped along the pool’s rim, his glass of whiskey balanced on the ledge nearby. Marina is entirely naked; she is stunning the last time you see her at the restaurant, but now seeing her here, you understand why McMahon is so obsessed with her.
You glance at your watch. Nearly half an hour has passed. The can of Diet Coke on the table has gone flat, condensation pooling around the coaster. You’ve been waiting in silence, watching the scene outside like it’s some slow, uncomfortable play.
Finally, McMahon and Marina rise from the pool, you can see water trailing down Marina's skin in thin rivulets that glint under the late light. she grabs a towel from a nearby chair, wrapping it loosely around her shoulders.
The suited man from earlier approaches Jack, leaning in to whisper something in his ear. Jack listens without much reaction, then turns his head toward the house. His gaze finds you through the glass.
@@.option-button;[[Wait|McMahonHouseVisit3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Jack McMahon steps into the living room a few minutes later, now dressed in a crisp white shirt, sleeves rolled halfway up. His hair is still damp, and he smells faintly of expensive cologne and chlorine.
<<dialogue "img/character/jack/jackavatar.png" "Jack" "Sheriff, sorry for keeping you waiting">>
<<dialogue $playerAvatar "You" "I understand. Appreciate you making the time">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "So you're here to inquire about how my properties became a pile of charcoal on Route 13">>
<<dialogue $playerAvatar "You" "Yes, I have to ask you some questions so that we can move on with the case">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "Case? What case? This was clearly an accident. One of my transport workers must have screwed up, causing the explosion. I, of course, do not blame them — their relatives will have my utmost condolences and reasonable compensation. I’ll also be donating $150,000 to the city for any public service cause. So it’s all good, man">>
<<dialogue $playerAvatar "You" "Your truck was found with four other vehicles. One of them has bullet marks, and we even found bullets scattered away from the scene. Doesn’t seem like an accident to me">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "I don’t care what you think. Every one of those vehicles belongs to me, and I'm taking the responsibility. What else do you want?">>
<<dialogue $playerAvatar "You" "Did the truck carry anything at the time of the accident?">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "No. It was empty">>
<<dialogue $playerAvatar "You" "Empty, yet armored and escorted by four other vehicles?">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "You can never be too cautious, can you?">>
Seems like Jack McMahon is already sizing this up, planning to handle it his way. He doesn’t want the police involved any further than he has to. You close your notepad slowly.
<<dialogue $playerAvatar "You" "Alright, Mr. McMahon. I think I’ve got enough for now. I don’t want to take up more of your time">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "I appreciate that, Sheriff. It’s not every day we get visitors like you">>
@@.option-button;[[Leave|McMahonHouseVisit4]]@@
<<set $SleepAfterMcMahonHouseVisit = 1>>
<<set $McMahonHouseVisit = 0>>
<<run hideSidebar()>>
<<set $Reputation += 5>>
<<run setup.showNotification("Your reputation has risen")>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to sleep")>><<if setup.isEvening($now) || setup.isNight($now)>>
<<goto "North Side">>
<<else>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<goto "McMahonHouseVisit4">>
<</if>>
You collapse onto the bed, the weight of the day pressing down on you. You should be exhausted, but your mind won’t shut off.
Lying in the dim glow of the city outside, you exhale slowly, staring at the ceiling. Tomorrow isn’t just about making Philip’s arrest stick. It’s about surviving the storm that’s coming with it.
@@.option-button;[[Wake up|Wine Storage]]@@
<<set $RobertoDead = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/starrynight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>In the dream, she’s there again — Carrie. Her smile soft, her touch familiar. The world around you feels warm, hazy, unreal. She reaches out, fingers brushing your cheek, and for a moment, the noise of Bason, the smoke, the lies, all fade away.
<<dialogue "img/character/carrie/carriesexavatar3.jpg" "Carrie" "Shall we continue where we left off?">>
<<dialogue $playerAvatar "You" "Yes...">>
<img src="img/character/carrie/carrieblowjob.webp" width=100%>
<<dialogue $playerAvatar "You" "Oh Carrie">>
<<dialogue "img/character/carrie/carriesexavatar2.jpg" "Carrie" "Nnngh—yes—mmph!">>
Carrie moans around your cock, the vibrations adding to the stimulation. Her tongue dances along the underside, tracing every vein and ridge. She takes you deeper and deeper, her jaw relaxing to accommodate your size, tears pricking at the corners of her eyes from the intensity.
<<dialogue "img/character/carrie/carriesexavatar5.jpg" "Carrie" "Gluuuk… gluuuk… gluk-gluk-gluk…">>
With a wet, obscene pop, Carrie wrenches her mouth off your cock, a thick strand of spit still stretching from her swollen bottom lip to your glistening tip before it snaps and splatters across her chin. She gasps, chest heaving, gulping air like she’s been drowning in you. Long, silvery ropes of saliva drip from her open mouth and slide down your shaft, pooling hot and slick over your balls.
<<dialogue "img/character/carrie/carriesexavatar4.jpg" "Carrie" "Fuck me. I need you buried inside me so deep I feel you for days">>
@@.option-button;[[Fuck Carrie|SleepAfterMcMahonHouseVisit1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/starrynight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You wake to the sharp buzz of your phone vibrating against the nightstand. The room is dim, the early morning light barely creeping through the blinds. You grope for the phone, eyes still heavy.
<<dialogue $playerAvatar "You" "Yeah?">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Sheriff, there’s been a shootout near the park. Locals called it in a few minutes ago. We’re already on our way">>
You swing your legs off the bed, already reaching for your shirt and badge.
<<dialogue $playerAvatar "You" "Okay, I'm on my way">>
@@.option-button;[[Get up|Wine Storage]]@@
<<set $ParkShootout1 = 1>>
<<set $StreetIncidentCall1 = 0>>
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to the park")>>You arrive at the park, lights flashing across the trees, the air thick with gunpowder and tension. Riley is already there, talking to a couple of forensic officers near the tape. When she sees you, she waves you over.
<<set $RoughWeek1 to setup.changeDate($now, 'days', 7)>>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Sheriff, we’ve got three bodies, all shot multiple times. From what we can tell, they’re members of a local biker crew">>
<<dialogue $playerAvatar "You" "Any witnesses?">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Yes, sir. One of the bystanders said it looked like a drive-by. Black sedan, tinted windows, drove past fast and opened fire...">>
Riley hesitates
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "I think this has something to do with the explosion on Route 13. I believe the gun dealer’s involved, sir">>
<<dialogue $playerAvatar "You" "Accusations like that shouldn’t be discussed in public, Riley. For now, go back to the department">>
@@.option-button;[[Leave|Park]]@@
<<set $ParkShootout1 = 0>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<run hideSidebar()>>
<<set $OneWeekWarMeeting = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/park/park.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Wait a week then go to the squadroom. Time: "+ formatGameDateTime($RoughWeek1))>>You step into the hallway, you spot Mary leaning against a locker, scrolling through her phone. You approach with an easy smile.
<<dialogue $playerAvatar "You" "Good morning, Mary">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Hi, what are you doing here?">>
<<dialogue $playerAvatar "You" "I'm just checking in">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Yeah, sure">>
<<dialogue $playerAvatar "You" "So, how are you and Haley doing these days?">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "That's none of your business. What, you here to interrogate students now?">>
<<dialogue $playerAvatar "You" " No, just talking">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Well, talk to someone else, and stay away from Haley">>
She walks off without another word, her tone sharp, her steps quick. You watch her go, unsure what you did wrong.
<<dialogue $playerAvatar "You" "(What's her problem?)">>
@@.option-button;[[Leave|University Hallway]]@@
<<nobr>><<for _i to 0; _i lt 1000; _i++>>
<<if $MaryConfessionTime gte $now>>
<<break>>
<</if>>
<<set $MaryConfessionTime to setup.changeDate($MaryConfessionTime, 'weeks', 1)>>
<</for>><</nobr>>
<<set $MaryConfession1 = 1>>
<<set $MaryFirstMeet = 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/university/universityhallway.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Mary", "Go to the church on sunday. Time: "+ formatGameDateTime($MaryConfessionTime))>>
<img src="img/character/franny/franny2.jpg" width=100%>
Full Name (Alias): Franny
Actress's name: Elena Vega
Age: Appears mid-20s
Height: 5'7" (170 cm)
Weight: 137 lbs (62 kg)
Build: 86-66-89 cm (34-26-35), balanced and subtly athletic, though malnourished when first found
Eye Color: Hazel – shifting between green and gold, alert but haunted
Hair: Auburn, tangled and unkempt when discovered, now worn loose with a natural sheen
Skin Tone: Pale, with faint discolorations hinting at long confinement
Scars/Tattoos: Faded tattoo under her right arm and another on her left thigh, both of unknown origin
Piercings: None visible
Background
Origin: Believed to be from somewhere in Eastern Europe; no records or ID found
Occupation: Unknown — possibly trafficked or held captive before discovery
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $MarinaFrannySexScene1 is 1>>
<<button [img[img/character/marina/marinafrannysex1.webp][GoodEndingBundle4]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/marina/marinafrannysex1.webp]]
</div>
<</if>>
<b>Good Ending Threesome 1</b>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/carrie/carrie.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name (Alias): Carrie Kendrick
Actress's name: Lasirena69
Age: 35
Height: 5'2" (157 cm)
Weight: 120 lbs (54 kg)
Build: 91-74-91 cm (36-29-36), compact yet curvy frame with a mature allure
Eye Color: Brown – sharp, guarded, often concealing what she truly feels
Hair: Brown, shoulder-length, well-kept but not overly styled—practical elegance
Skin Tone: Olive, warm and smooth with subtle signs of stress and sleepless nights
Scars/Tattoos: None visible
Piercings: Right nostril; left nipple; left tragus
Background
Origin: She was your girlfriend. After a failed heist 19 years ago, she somehow made her way to the town of Bason.
Occupation: Stay-at-home mom, wife of Mayor Kevin Kendrick, mother to Haley Kendrick.
Reputation: Polite in public, composed, the picture of a small-town wife.
Personality: Fiercely intelligent, emotionally conflicted. Carrie hides guilt beneath layers of control and bitterness.
Your coming to Bason is a threat to everything she’s built on lies.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $CarrieSexScene1 is 1>>
<<button [img[img/character/carrie/carriebreastfondling.webp][BackToTheHijackSite4]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/carrie/carriebreastfondling.webp]]
</div>
<</if>>
<b>Carrie Dream Sequence 1</b>
</td>
<td>
<<if $CarrieSexScene2 is 1>>
<<button [img[img/character/carrie/carriesex1.webp][SleepAfterMcMahonHouseVisit]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/carrie/carriesex1.webp]]
</div>
<</if>>
<b>Carrie Dream Sequence 2</b>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/mary/mary.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name: Mary De Santa
Actress's name: Autumn Falls
Age: 20
Height: 5'3" (160 cm)
Weight: 119 lbs (54 kg)
Build: 89-61-89 cm (35-24-35), petite and well-proportioned, with a naturally soft grace
Eye Color: Brown – warm and tender, often betraying feelings she tries to hide
Hair: Brown, shoulder-length with natural waves, usually worn loose
Skin Tone: Light tan, sun-kissed from days spent outdoors
Scars/Tattoos: Small leaf tattoo on her left heel
Piercings: Navel
Background
Origin: Born and raised in Bason, deeply rooted in the small-town life.
Occupation: Student at Bason University, and a member of Saint Morty's chorus.
Reputation: She’s known as Haley Kendrick’s best friend—though some quietly suspect her affection for Haley runs deeper than friendship.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $MarySexScene1 is 1>>
<<button [img[img/character/mary/marypeeping.webp][MaryConfession1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/mary/marypeeping.webp]]
</div>
<</if>>
<b>Mary Glory Hole 1</b>
</td>
<td>
<<if $MarySexScene2 is 1>>
<<button [img[img/character/mary/maryblowjob2.webp][MaryConfession8]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/mary/maryblowjob2.webp]]
</div>
<</if>>
<b>Mary Glory Hole 2</b>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Riverbank</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/emmetthouse/emmetthouse.png][EmmettRV]]>><</button>>
<div class="location-name"><b>Emmett's RV</b></div>
</td>
<td>
<<button [img[img/location/westside/westside.jpg][West Side]]>><</button>>
<div class="location-name"><b>West Side</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/riverbank/riverbank1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Emmett's RV</div>
<<setPassageVariableMap>>
@@.option-button;[[Emmett]]@@
<<if $EmmettTelescope == 1>>@@.option-button;[[Telescope|EmmettTelescope]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/riverbank/riverbank1.png][Riverbank]]>><</button>>
<div class="location-name"><b>Riverbank</b></div>
</td>
</tr>
</table><</nobr>>
<<if $EmmettTalk1 == 1>><<goto "EmmettTalk1">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/emmetthouse/emmetthouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Emmett's RV</div>
<img src="img/character/emmett/emmett.jpg" width=100%>
<<setPassageVariableNoMap>>
<<dialogue "img/character/emmett/emmettavatar.jpg" "Emmett" "Ждθκ! Πрρ... φфф... мiрааа τокх εεε!">>
<<nobr>><<if $EmmettTalk2 == 1 && $inventory["Vodka"] && $inventory["Vodka"].quantity >= 5>>
@@.option-button;[[Give Emmett some vodkas|EmmettTalk2]]@@
<<elseif $EmmettTalk2 == 1>>
@@.option-button-disabled;Give Emmett some vodkas@@
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/riverbank/riverbank1.png][Riverbank]]>><</button>>
<div class="location-name"><b>Riverbank</b></div>
</td>
<td>
<<button [img[img/location/emmetthouse/emmetthouse.png][EmmettRV]]>><</button>>
<div class="location-name"><b>Emmett's RV</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/emmetthouse/emmetthouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Case 3: Safety Concern About RV Near the Riverbank
<img src="img/location/emmetthouse/emmetthouse.png" width=100%>
Incident: Several local Bason's residents have expressed concern regarding an RV that has been parked along the riverbank for an extended period.
Detail: Citizens reported that the vehicle’s location may pose potential safety and environmental risks, particularly due to its proximity to the water.
---------------------------------------------------------------------------------------------
<<if $Case3Solve == 1>>Case solved
<<link "Archive">><<useItem "Riverbank RV Case">><<goto $prevPassage>><<run $('.popup-overlay').remove()>><</link>><</if>>You push through the reeds, boots sucking in sand. The RV squats ahead. You knock on the door.
It swings open, and a man peers out, mid-forties, lean, green military jacket hanging loose, tin foil hat crinkled into a perfect cone. He clutches an empty vodka bottle like a relic. He sees you and his eyes flare
<<dialogue "img/character/emmett/emmettavatar.jpg" "Emmett" "Zhrαk-tulα! Veni-krrsh! Nαvem intrα, frαter ex stellis!">>
<<dialogue $playerAvatar "You" "What?">>
None of it means a damn thing. His hands flail, pointing at the RV door, then the sky, then the bottle. He gestures you closer, urgent, like you’re late for a meeting.
<<dialogue $playerAvatar "You" "What is your name?">>
<<dialogue "img/character/emmett/emmettavatar.jpg" "Emmett" "Да! Эммэт… но... Ϙρρ... смотри, смотри!">>
<<dialogue $playerAvatar "You" "Okay, can you move your RV away from the riverbank? It’s not safe to park here">>
He grabs a sealed bottle, cracks it with his teeth, and mimes pouring it into an empty bottle on the table. The vodka glugs out, vanishes into nothing. He grins, teeth yellow, eyes wild, and jabbers again.
<<dialogue "img/character/emmett/emmettavatar.jpg" "Emmett" "αqua nihilo! Aroys-krrsh! Fol-dringα!">>
He shoves the empty bottle at you, nodding like you’re supposed to understand. You just stand there, trying not to laugh or flinch.
<<dialogue $playerAvatar "You" "Sure, they’re… trrr… κκκ. Got it.">>
@@.option-button;[[Leave|Riverbank]]@@
<<set $EmmettTalk1 = 0>>
<<set $EmmettTalk2 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/emmetthouse/emmetthouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You slip into one of the confessional booths, planning only to sit and gather your thoughts. For a while, there’s nothing but the sound of your own breathing and the faint echo of a hymn somewhere in the hall.
Then the door on the other side opens. A soft, hesitant, nervous voice speaks. You recognize it instantly. It’s Mary.
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Is anyone there?">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Good. Forgive me, Father, it’s been a week since my last confession, I’ve been... keeping something I shouldn’t. I love someone I’m not supposed to">>
You hold your breath, realizing she doesn’t know you’re in the next booth. you turn on your recorder,
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Okay... Forgive me, Father, for I have sinned, I’ve been... keeping something I shouldn’t. I love someone I’m not supposed to">>
There’s a pause. Then her words come faster, as if she’s been holding them back for too long.
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "I don’t know what’s wrong with me. I can’t sleep. I keep thinking about her — about Haley. I’ve tried to pray it away, I’ve tried to stop it, but every time I see her, it just... hurts">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "I know it’s wrong, Father. But I can’t help it. I love her. I pray her deadbeat boyfriend, Gareth would just drop dead, that creep sheriff too">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Please, tell me what to do. Hear my prayers, and in return, I will give you my chastity">>
@@.option-button;[[Speak up|MaryConfession2]]@@
<<run hideSidebar()>>
<<audio "ChurchConfession" play>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "I hear you, Mary... my child. Your wish will be granted">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "W-What? Who’s… who’s there? If you think this is a joke then fuck off">>
<<dialogue $playerAvatar "You" "That is a sin, Mary. To speak so in the house of God. To curse the One who listens">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Oh God, I’m sorry, I didn’t, I did not recognize Your presence, I—">>
<<dialogue $playerAvatar "You" "Silence">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Father, please, I didn’t mean—">>
<<dialogue $playerAvatar "You" "You must be punished">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Yes, Father, punish me">>
@@.option-button;[[Demand her to undress|MaryConfession3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/mary/marypeeping.webp" width=100% style="display: block; margin: 0 auto;">
Her hands tremble as they move to the buttons of her blouse. One by one, they slip free. The soft cotton parts, revealing the simple white bra beneath. She shrugs the blouse off her shoulders, lets it pool on the kneeler.
Next the skirt (zipper eased down, fabric sliding over her hips until it drops to her ankles). She steps out of it carefully, folded neatly beside her.
Now only bra, panties, and the thin gold cross at her throat.
<<dialogue $playerAvatar "You" "Your body still carries the weight of your desire. Words alone will not cleanse you">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "What… what must I do?">>
@@.option-button;[[Tell her to touch herself|MaryConfession3.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Beer</h2><img src="img/item/beer.png" width =100%>
<p><strong>Type:</strong> Consumable</p><p><strong>Full Description:</strong> A can of beer.</p><<nobr>><<if not $inventory["Beer"] or not $inventory["Beer"].quantity>>
<p style="color: red; font-weight: bold;">No Beer left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Beer"].quantity>></p>
@@.option-button;<<link "Drink">><<useItem "Beer">><<goto $prevPassage>><<run $('.popup-overlay').remove()>><</link>>@@<</if>><</nobr>>
<h2>Vodka</h2><img src="img/item/vodka.png" width =100%>
<p><strong>Type:</strong> Consumable</p><p><strong>Full Description:</strong> A bottle of Vodka.</p><<nobr>><<if not $inventory["Vodka"] or not $inventory["Vodka"].quantity>>
<p style="color: red; font-weight: bold;">No Vodka left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Vodka"].quantity>></p>
@@.option-button;<<link "Drink">><<useItem "Vodka">><<goto $prevPassage>><<run $('.popup-overlay').remove()>><</link>>@@<</if>><</nobr>>
<h2>Whisky</h2><img src="img/item/whisky.png" width =100%>
<p><strong>Type:</strong> Consumable</p><p><strong>Full Description:</strong> A bottle of Whisky.</p><<nobr>><<if not $inventory["Whisky"] or not $inventory["Whisky"].quantity>>
<p style="color: red; font-weight: bold;">No Whisky left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Whisky"].quantity>></p>
@@.option-button;<<link "Drink">><<useItem "Whisky">><<goto $prevPassage>><<run $('.popup-overlay').remove()>><</link>>@@<</if>><</nobr>>
You pull a fresh vodka bottle from the crate, twist the cap, and hand it over. Emmett grabs it with both hands, tilts his head back, and drains the entire thing in one long, unbroken pull. The bottle empties with a hollow glug-glug-glug, then clatters to the floor. He blinks, hard, once, twice. The wild glaze in his eyes clears like fog burning off a windshield.
<<dialogue "img/character/emmett/emmettavatar.jpg" "Emmett" "Jesus, that’s better. And uh... thanks, needed that to reboot the brain">>
<<dialogue $playerAvatar "You" "You need more?">>
You pull out a few bottles of vodka.
<<dialogue "img/character/emmett/emmettavatar.jpg" "Emmett" "Yes, you are a savior">>
<<dialogue $playerAvatar "You" "You can have vodka, but I need you to move the RV somewhere else. Safety concerns">>
<<dialogue "img/character/emmett/emmettavatar.jpg" "Emmett" "It's safe here, man. Bank’s twelve feet above flood stage. Takes a miracle for the water to reach me. I checked the topo maps">>
Emmett waves you into the RV. He flips open a folding table bolted to the wall. A stack of topographic maps spreads out like a deck of cards (USGS 7.5-minute quads, edges curled, every contour line annotated in red pen). He taps one with his finger.
<<dialogue "img/character/emmett/emmettavatar.jpg" "Emmett" "See? Twelve-foot bank. River’s gotta rise that much before it licks the tires">>
You glance around. A telescope squats on a tripod. Custom antennas. A battered laptop. A shortwave rig crackles beside it, LEDs pulsing green.
<<dialogue $playerAvatar "You" "What exactly are you doing out here, Emmett?">>
<<dialogue "img/character/emmett/emmettavatar.jpg" "Emmett" "I'm observing Comet 47P/Velikovsky-B. Comes around every 9.3 years. This pass is special. Closest approach in two centuries">>
<<dialogue $playerAvatar "You" "That's sound cool. Just making sure you’re not cooking meth or running a still">>
<<dialogue "img/character/emmett/emmettavatar.jpg" "Emmett" "Thanks. If you wanna check on the star, you know the spot">>
@@.option-button;[[Leave|Riverbank]]@@
<<set $EmmettTalk2 = 0>>
<<set $EmmettTalk3 = 1>>
<<set $EmmettTelescope = 1>>
<<set $Case3Solve = 1>>
<<useItem "Vodka" 5>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/emmetthouse/emmetthouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Emmett's RV</div>
<<if setup.isOpeningHours($now)>>
<img src="img/location/emmetthouse/emmetttelescope.jpg" width=100% style="filter: brightness(1.0);"><<else>><img src="img/various/thecomet.webp" width=100%><</if>>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/riverbank/riverbank1.png][Riverbank]]>><</button>>
<div class="location-name"><b>Riverbank</b></div>
</td>
<td>
<<button [img[img/location/emmetthouse/emmetthouse.png][EmmettRV]]>><</button>>
<div class="location-name"><b>Emmett's RV</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/emmetthouse/emmetthouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Wine Storage</div><<set $frannyhunger to $now-$frannylastate>>
<<nobr>><<set $FrannyRestChance = Math.floor(Math.random() * 100)>>
<<if $FrannyRestChance <= 50>>
<img src="img/character/franny/frannyresting.webp" width=100%>
<<elseif $FrannyRestChance >50 >>
<img src="img/character/franny/franny3.jpg" width=100%>
<</if>><</nobr>>
<<setPassageVariableNoMap>><b>Franny's affection: $FrannyAffection</b>
<<nobr>>
<<if setup.isEvening($now) || setup.isNight($now)>>@@.option-button;[[Check on Franny|FrannyPeeking]]@@<</if>>
<<if $frannyhunger >= 86400000>>
<<if $inventory["Happy Meal"]>>
@@.option-button;<<link "Feed Franny">><<useItem "Happy Meal">><<goto "FrannyAtWineStorage">><<set $frannylastate to $now>><<set $FrannyAffection += 2>><<run setup.showNotification("💋Franny affection + 2")>><</link>>@@<<else>>@@.option-button-disabled;Franny seems especially fond of one particular type of food@@<</if>>
@@.option-button;<<link "Pat Franny's head">><<goto "FrannyHeadPat">><<set $frannylastate to $now>><<set $FrannyAffection += 1>><<run setup.showNotification("💋Franny affection + 1")>><</link>>@@
@@.option-button;<<link "Taking Franny out to pee">><<goto "FrannyPeeing">><<set $frannylastate to $now>><<set $FrannyAffection += 1>><<run setup.showNotification("💋Franny affection + 1")>><</link>>@@<</if>>
<div class="styled-line"></div>
<<if !$FrannyDildoPlay and $inventory["Silicone Dildo"] and $FrannyAffection >= 5>>@@.option-button;<<link "Give Franny a dildo">><<set $FrannyDildoPlay = 1>><<useItem "Silicone Dildo">><<set $FrannyAffection += 1>><<run setup.showNotification("💋Franny affection + 5")>><<goto "FrannyAtWineStorage">><</link>>@@<</if>>
<<if !$FrannyVibratingPantiesPlay and $inventory["Vibrating Panties"] and $FrannyAffection >= 5>>@@.option-button;<<link "Replace Franny's panties with a Vibrating Panties">><<set $FrannyVibratingPantiesPlay = 1>><<useItem "Vibrating Panties">><<set $moral -= 5>><<goto "FrannyAtWineStorage">><</link>>@@<</if>>
<<if $FrannyAffection >= 5>>@@.option-button;[[Cuddle with Franny|FrannyCuddle]]@@<<else>>@@.option-button-disabled;Franny doesn’t feel comfortable doing this with you@@<</if>>
<<if $FrannyAffection >= 10>>@@.option-button;[[Kiss Franny|FrannyKissing]]@@<<else>>@@.option-button-disabled;Franny doesn’t feel comfortable doing this with you@@<</if>>
<<if $FrannyDildoPlay == 1 && $FrannyAffection >= 10>>@@.option-button;[[Watch Franny play with dildo|FrannyDildoPlay]]@@<<else>>@@.option-button-disabled;Franny doesn’t feel comfortable doing this with you@@<</if>>
<<if $FrannyVibratingPantiesPlay == 1 && $FrannyAffection >= 10>>@@.option-button;[[Watch Franny play with Vibrating Panties|FrannyVibratingPantiesPlay]]@@<</if>>
<<if $moral <= -10>>@@.option-button;[[Molest Franny|FrannyMolestation]]@@<<else>>@@.option-button-disabled;You are not evil enough to do this😈@@<</if>>
<<if $moral <= -20>>@@.option-button;[[Franny face fuck|FrannyFaceFuck]]@@<<else>>@@.option-button-disabled;You are not evil enough to do this😈@@<</if>>
<</nobr>><div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bar/saltbar.jpg][SaltBar]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
<td>
<<button [img[img/location/bar/winestorage.jpg][Wine Storage]]>><</button>>
<div class="location-name"><b>Wine Storage</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<nobr>><<set $CassieChangingChance = Math.floor(Math.random() * 100)>>
<<if $CassieChangingChance <= 50>>
<img src="img/character/cassie/cassiechanging1.webp" width=100%>
<<else>>
<img src="img/character/cassie/cassiechanging2.webp" width=100%>
<</if>><</nobr>>
@@.option-button;[[Leave|Massage Parlor]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/franny/frannyheadpat.webp" width=70% style="display: block; margin: 0 auto;">
You reach out and rest your palm gently on the top of Franny's head. Your fingers thread into her soft hair, warm from the shower. She stills completely, breath catching for a second then her eyes flutter half-closed and she leans, almost imperceptibly, into your touch. Her shoulders loosen; the tension she always carries melts a little. You pat her head. She nuzzles closer, cheek brushing your abdomen, and stays there, breathing slow and even while your hand keeps its gentle, steady rhythm in her hair.
@@.option-button;[[Leave|FrannyAtWineStorage]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/franny/frannymolestation1.webp" width=100%>
You suddenly grab Franny's tits and start fondling them. Franny looks uncomfortable, but she lets it happen..
You cup one small breast gently, the fabric warm from her body. It fits perfectly in your hand, barely more than a gentle swell. Your thumb traces slow circles over her soft skin, feeling her nipple gradually grow stiff and sensitive
You keep fondling her slowly, lazily, squeezing softly, rolling the nipple between your fingers through the tank top until you are bored.
<<dialogue "img/character/franny/frannyavatar.jpg" "Franny" ". . .">>
@@.option-button;[[Leave|FrannyAtWineStorage]]@@
<<set $moral -= 5>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<nobr>><<set $FrannyChangingChance = Math.floor(Math.random() * 100)>>
<<if $FrannyChangingChance <= 50>>
<img src="img/character/franny/frannypeeking1.webp" width=100%>
<<else>>
<img src="img/character/franny/frannypeeking2.webp" width=100%>
<</if>><</nobr>>
You ease the door open just an inch, enough to see. Franny body is slender, delicate. Small breasts sit high on her chest, the skin pale and smooth. Her nipples are a soft, small and perfect, tightening slightly in the cool air of the room. She doesn’t cover herself; there’s no shame in her movements. She reaches for the towel folded on the bed and wraps it around her torso slowly, tucking the corner securely between her breasts.
@@.option-button;[[Leave|FrannyAtWineStorage]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/franny/frannycuddle.webp" width=100%>
Franny climbs onto the bed on her knees, crawls across the mattress, and slips under the blanket beside you. Without a word she tucks herself against your side, head settling on your chest, one slender leg sliding between yours. You wrap an arm around her, pulling her closer. She fits perfectly—small and light, curling into you like she was made for this spot.
<<dialogue "img/character/franny/frannyavatar.jpg" "Franny" ". . .">>
@@.option-button;[[Leave|FrannyAtWineStorage]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You step into the squad room. Riley, David, and Selena all look up from the case files scattered across the table. You take your seat at the head.
<<dialogue $playerAvatar "You" "Alright. How was last week?">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "We’ve had three major cases connected to the biker situation">>
<<dialogue "img/character/david/david.png" "David" "First one was the shootout near the park—three dead, all confirmed McMahon's crew">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Second case: someone put a Molotov through the front window of the Ammu-Nation, no casualty">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "And the third… there was a drive-by at the abandoned mine apartments. Casualties are unknown">>
<<dialogue "img/character/david/david.png" "David" "It’s getting worse. If this keeps up, someone outside their world is going to get caught in the crossfire. We’re already looking at dozens of robbery and sexual-assault reports across town">>
<<dialogue $playerAvatar "You" "Okay, this won’t stop on its own. Talking to McMahon didn’t get us anywhere… so we try the other side">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "You mean the bikers?">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "I want to go with you, sir">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Rookie… it’s dangerous. The abandoned mine is their territory">>
<<dialogue "img/character/david/david.png" "David" "That place isn’t friendly, kid">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "I know. But I can learn from this. And going alone is worse. At least with two of us, you’ve got someone watching your back">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "You sure you’re ready for this? Those aren’t petty thieves">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "I’m sure, deputy">>
<<dialogue $playerAvatar "You" "Fine. But you stay close, you follow my instructions exactly">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Yes, sir">>
@@.option-button;[[Leave|SquadRoom]]@@
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $OneWeekWarMeeting = 0>>
<<set $AbandonedMineCheck1 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to the abandoned mine. (Continue with Riley guild first for more content)")>><div class="location-banner">South Apartment</div>
<<setPassageVariableMap>>
<<nobr>><<if $AbandonedMineCheck1 == 1 and $Strength >= 5 and $Intelligence >= 6 and $energy >= 10>>
@@.option-button;<<link "Get closer">><<goto "AbandonedMineCheck1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $AbandonedMineCheck1 == 1>>
@@.option-button-disabled;Get closer • 💪 Strength 5 • 🧠 Intelligence 6 • ⚡ Energy 10@@<</if>>
@@.option-button;[[Back door|South Apartment Backdoor]]@@<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/abandonedmine/abandonedmine.png][Abandoned Mine]]>><</button>>
<div class="location-name"><b>Abandoned Mine</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/abandonedmine/southapartment.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">South Apartment Backdoor</div>
<<setPassageVariableMap>>
@@.option-button;[[Go back|South Apartment]]@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/abandonedmine/abandonedmine.png][Abandoned Mine]]>><</button>>
<div class="location-name"><b>Abandoned Mine</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/abandonedmine/southapartmentbackdoor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You and Riley pull up to the run-down apartment block overlooking the abandoned mine. Rusted railings, cracked windows, and the distant roar of motorcycles mark the edge of biker territory. Not far from the riverbank from the south side, a lone woman leans against her bike. She’s blonde, blue-eyed, and wearing a biker jacket unzipped.
<img src="img/character/natasha/natasha3.jpg" width=100%>
The moment she spots you approaching, she straightens, chin tilted up with an easy, fearless smirk.
<<dialogue $playerAvatar "You" "Bason Sheriff Department. I’m Sheriff $PlayerInput, this is deputy Riley">>
<<dialogue "img/character/natasha/natashaavatar1.jpg" "Natasha" "Aren’t you two a long way from mid town? Name’s Natasha">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "We’re hoping to speak with someone from your crew">>
<<dialogue "img/character/natasha/natashaavatar1.jpg" "Natasha" "About what?">>
<<dialogue $playerAvatar "You" "Just wanted to talk about how the town’s crime rate has skyrocketed over the past week">>
<<dialogue "img/character/natasha/natashaavatar1.jpg" "Natasha" "Okay, you’re the authority. He’s in the back. Follow me">>
<<dialogue $playerAvatar "You" "Thank you">>
@@.option-button;[[Go to the backdoor|AbandonedMineCheck2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/abandonedmine/southapartment.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Cayton Trigger stands alone at the edge, big shoulders squared, hands clasped behind his back like a general surveying a battlefield. Leather cut, no patches. Arms scarred like topographical maps. He doesn’t turn when your boots crunch gravel.
<img src="img/character/clayton/clayton1.png" width=100%>
<<dialogue $playerAvatar "You" "Clayton Trigger">>
<<dialogue "img/character/clayton/claytonavatar.jpg" "Clayton" ". . .">>
<<dialogue $playerAvatar "You" "BSD. I need a word with you. Your little feud with McMahon is bleeding into town">>
<<dialogue "img/character/clayton/claytonavatar.jpg" "Clayton" "Really?">>
<<dialogue $playerAvatar "You" "One of my deputies caught your men assaulting civilians">>
<<dialogue "img/character/clayton/claytonavatar.jpg" "Clayton" "That’s just a minor inconvenience. Anyone living in this town should’ve seen it coming">>
<<dialogue $playerAvatar "You" "You know what? Admittedly, I don't give a flying fuck about you or Jack McMahon. But messing with Bason’s hard-working folks? Yeah… that’s not something I’m gonna ignore">>
<<dialogue "img/character/clayton/claytonavatar.jpg" "Clayton" "You got stones, sheriff. Walking onto my ground. Telling me my business">>
<<dialogue $playerAvatar "You" "Yeah, either I tell you this now or I’ll make sure those three cells at the department get packed with every biker I can find. I swear it">>
<<dialogue "img/character/clayton/claytonavatar.jpg" "Clayton" "I was expecting you to be just another hound for the mafia. Like Morgan. I’ll tell my men to stay away from the civilians">>
Clayton ends the conversation simply by not speaking again.
@@.option-button;[[Leave|AbandonedMineCheck4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/abandonedmine/southapartmentyard.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Natasha leads you and Riley toward the old apartment complex. The place is worn down, graffiti on the walls, bikes parked crookedly along the walkway. As you move deeper inside, more bikers lounge around, smoking or tinkering with engines.
A couple of them whistle when they see Riley.
<<dialogue "img/various/unknown.png" "Biker 1" "Hey sweetheart, you lost?">>
<<dialogue "img/various/unknown.png" "Biker 2" "Damn, look at those juicy tits">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" ". . .">>
Riley stiffens, clearly uncomfortable but staying professional.
<<dialogue $playerAvatar "You" "Enough">>
<<dialogue "img/character/natasha/natashaavatar1.jpg" "Natasha" "Ignore them. You walk with me, you’re fine">>
@@.option-button;[[Keep going|AbandonedMineCheck3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/abandonedmine/southapartmentbackdoor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You and Riley walk past the line of bikes. A knot of bikers lounges against a row of chopped bikes, five or six of them, leather cuts scarred and filthy, beards streaked with grease. One whistles low as Riley passes.
Riley doesn’t break stride. You don’t either. You both try to ignore them, but that unmistakable, obscene sound, the slick, hurried rhythm of fist on flesh, is impossible to tune out.
Riley makes a poor choice by looking over. The biker with the shaved head was already stepping forward, cock in hand, eyes shining with animal triumph. He gave one last pump and flung it.
The warm and thick splatters across the side of Riley’s face, her neck, the collar of her uniform shirt.
<img src="img/character/riley/rileycumonface.png" width=50% style="display: block; margin: 0 auto;">
Riley froze, mouth open, eyes wide, the shock hitting her harder than any punch. Semen slid down the curve of her throat. Behind her, the bikers howled, drunk, vicious, delighted.
You move without thinking and punch the animal square in the jaw, knocking him out instantly.
His biker friends stare at you with wide, stunned eyes that quickly twist into anger. They spread out, stepping toward you, ready to jump you then and there.
Before anyone can throw a punch, a sharp whistle slices through the moment. Natasha strides toward the group, eyes sharp and furious. She reaches Riley first, handing her a bandanna, then turns to the gang.
<<dialogue "img/character/natasha/natashaavatar1.jpg" "Natasha" "Back. The fuck. Off">>
The bikers step back reluctantly. You nod to Natasha, then guide Riley away.
@@.option-button;[[Leave|AbandonedMineCheck5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/abandonedmine/southapartmentbackdoor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Creed Championship Belt</h2><img src="img/item/creedcrown.png" width =100%>
<p><strong>Type:</strong> Boxing title belt</p><p><strong>Full Description:</strong> Boxing title belt with Sald name on it</p>
This championship belt was awarded to Salt Creed, a heavyweight boxer who made his name in underground East Coast fight circuits. He won it in 1970, during the Atlantic League Title Match.
Salt secured the belt by defeating his opponent in Round 8 with a decisive knockout—an upset victory that cemented his reputation as one of the toughest and most relentless fighters of his era.
Ever since that night, the belt has been known simply as Creed’s Crown.
You drive Riley back into town in silence. At her house, she steps out of the car.
<<dialogue $playerAvatar "You" "I’m sorry you had to deal with that">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "It’s fine. Just… not what I expected today">><<if $RileySex1 == 1>>
<<dialogue $playerAvatar "You" "Are you sure?">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "You wanna come inside?">>
<<dialogue $playerAvatar "You" "Yeah">>
@@.option-button;[[Come inside|RileyBathroomSex0]]@@
<<else>>
<<dialogue $playerAvatar "You" "Okay, take care rookie">>
@@.option-button;[[Leave|BSD]]@@
<</if>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $Reputation += 5>>
<<set $MarinaCall2 = 1>>
<<set $AbandonedMineCheck1 = 0>>
<<set $RoughWeek1 to undefined>>
<<run hideSidebar()>>
<<run setup.showNotification("Your reputation has risen")>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileyhouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Receive Marina's phone call")>><<dialogue $playerAvatar "You" "Wait here, okay? I just… need to wash this off">>
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "It’s fine. Just… not what I expected today">>
She disappears down the short hallway. Water starts running, hard and hot. You hear the first choked breath, then another.
You give it ten seconds. Then you follow.The bathroom door is ajar. Steam is already fogging the mirror. Riley’s standing over the sink in her undershirt, sleeves shoved up, scrubbing at her face with a washcloth like she’s trying to take the skin off. She catches your reflection and freezes, eyes wide, wet, terrified.
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "I said I’d be out in a minute">>
<<dialogue $playerAvatar "You" "Riley">>
Riley slides down the cabinets until she’s sitting on the bathmat, knees to her chest. The tears come all at once, hard, ugly, the kind that hurt.
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "I feel dirty. I feel so fucking dirty and I can’t get it off and I’m scared that every time you look at me now you’ll see… that. You won’t want me anymore">>
You crouch in front of her, slow, the way you’d approach something wounded that might bolt. You take the soaked cloth from her shaking fingers, drop it in the sink. Then you cup her face in both hands, thumbs gentle on her wet cheeks.
<<dialogue $playerAvatar "You" "Look at me. You think a little filth changes what I see when I look at you?">>
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "You are lying...">>
<<dialogue $playerAvatar "You" "You want proof? I'll give you proof">>
@@.option-button;[[Eat her pussy|RileyBathroomSex1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileybathroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Riley lets out a sharp gasp as your tongue makes contact with her most intimate area, her knees nearly buckling at the intense new sensation. Her hands fly to your shoulders, gripping tightly as if anchoring herself.
<img src="img/character/riley/rileyshower1.webp" width=100%>
<<dialogue "img/character/riley/rileysexavatar2.jpg" "Riley" "Oh God!">>
The water from the shower cascades over both of you, mixing with the growing wetness between her thighs. Riley's entire body tenses as the overwhelming sensations crest, her back arching sharply. A choked cry tears from her throat as her first ever orgasm crashes over her in waves of pure ecstasy.
<<dialogue "img/character/riley/rileysexavatar3.jpg" "Riley" "AAHHHHNNN!!!">>
Her fingernails dig into your shoulders as she rides out the intense peaks of pleasure, juices gushing from her spasming core to mix with the shower water. Tears of overwhelmed emotion prick at the corners of her eyes.
@@.option-button;[[Fuck her|RileyBathroomSex2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileybathroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Salt told you he pawned his old championship belt years ago. And with the war going on tonight, you figure this is your chance to get it back the less expensive way.
Using the key-maker’s tool, you break into the shop with ease. You move straight for the display shelves, and the belt is right there, hanging on the wall,
<img src="img/item/creedcrown.png" width =100%>
You grab it and to make sure nobody thinks the belt was the only target, you grab a few random small items just enough to muddy the trail.
A quiet break-in, a quick grab, and you disappear into the night with Salt’s championship belt under your arm.
@@.option-button;[[leave|PawnShop]]@@
<<run hideSidebar()>>
<<addItem "Creed Championship Belt" "img/item/creedcrown.png" "Boxing title belt with Sald name on it." "" "Boxing title belt" 5000 1>>
<<set delete $PawnShopItems["Creed Championship Belt"]>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/pawnshop/pawnshopinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.2) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Hey Salt, I’ve got something for you">>
You pull the belt from your backpack. Salt lets out a slow breath, almost a laugh, almost a sob. He takes the belt from your hands like it’s something sacred, brushing his thumb over the worn leather, the faded gold.
<img src="img/item/creedcrown.png" width =100%>
<<dialogue "img/character/salt/saltavatar.png" "Salt" "Thank man, you don’t know what this means to me. Really...Thank you.">>
@@.option-button;[[Leave|SaltBarInside]]@@
<<useItem "Creed Championship Belt">>
<<run hideSidebar()>>
<<run setup.showNotification("Salt will remember this")>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/barinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Hey, Rissa. How’s your brother doing?">>
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "I haven’t seen him in a while, but he’s been calling more, checking in on me. Why do you want to know?">>
<<dialogue $playerAvatar "You" "I can’t get in touch with him after the job, so I figured I’d ask you instead">>
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "He told me he’s okay, but he won’t be able to visit for the time being">>
<<dialogue $playerAvatar "You" "That’s really good to hear">>
<<dialogue "img/character/rissa/rissaavatar.jpg" "Rissa" "You came all the way here just to ask about my brother?">>
<<dialogue $playerAvatar "You" "No, I'm here to fuck your brain out">>
@@.option-button;[[Kiss Rissa|RissaVisit1sex]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Riley whimpers softly as she feels your hard cock rubbing against her clit, the stimulation sending aftershocks through her trembling body. The head of your cock catches on her entrance with each pass, teasing her with the promise of fullness. Her hips undulate urgently, trying to impale herself with it.
<<dialogue "img/character/riley/rileysexavatar4.jpg" "Riley" "P-please $PlayerInput... I need it...">>
<img src="img/character/riley/rileyshower2.webp" width=100%>
You finally sheath yourself fully inside her tight cunt. Her inner walls flutter and clench around your invading length, struggling to accommodate the sudden stretch.
<<dialogue "img/character/riley/rileysexavatar1.webp" "Riley" "Fuhkkkk meee~">>
As you increase your pace, Riley throws her head back with a silent scream of ecstasy, her eyes rolling back in bliss. The wet slap of skin on skin echoes obscenely in the confined space of the shower as you pound into her willing body.
<<dialogue "img/character/riley/rileysexavatar5.jpg" "Riley" "YesyesyesYES!!! Don't stop, I'm gonna... I'm gonna...">>
Suddenly, Riley's entire body seizes up, back arching almost painfully as her second climax crashes over her like a tidal wave, so intense that you have to pick her up and carry her to the bedroom while her love juice is still dripping from her cunt .
@@.option-button;[[Fuck her more|RileyBathroomSex3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileybathroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Putting her on top, you plunge your cock inside her pussy and start fucking her. She sinks down onto you with a drawn-out moan, relishing the feeling of being so deliciously stretched and filled once more.
<img src="img/character/riley/rileytopsex.webp" width=100%>
<<dialogue "img/character/riley/rileysexavatar6.jpg" "Riley" "Ohhh $PlayerInput... you feel even bigger like this...">>
Riley pants, bracing her small hands on your chest as she starts to rock her hips experimentally. The new angle allows her to take you impossibly deep, the head of your cock kissing her cervix with each downward grind.
<<dialogue "img/character/riley/rileysexavatar7.jpg" "Riley" "AAHHHNNN YESSS!!! please! Ruin my tight little pussy!">>
Riley's eyes roll back in sheer bliss as you start thrusting up into her with renewed vigor, each powerful stroke reaching depths she didn't know were possible. Her plush ass jiggles with the force of your movements, the obscene sound of skin slapping against skin filling the room. Her pert breasts bounce enticingly with the motion, droplets of water still clinging to her skin
<<dialogue $playerAvatar "You" "I'm about to cum, Riley">>
<<dialogue "img/character/riley/rileysexavatar8.jpg" "Riley" "Yes, yes, YES! Fill me up! fill my insides white with your hot seed!">>
Riley clenches her inner muscles rhythmically around your pistoning length, determined to milk every last drop of your impending release. As your hot seed erupts inside her, Riley throws her head back with a silent scream of ecstasy, her eyes rolling back in sheer bliss. Her velvety walls clamp down on you like a vice, rippling and fluttering as they greedily milk every last drop of your release.
<<dialogue "img/character/riley/rileysexavatar9.jpg" "Riley" "AAAHHHHNNN!!!">>
Utterly spent from the intensity of her orgasms, Riley's limp, twitching body slumps back onto the mattress beside you. She sprawls there bonelessly, chest heaving as she gulps in air, trying to catch her breath. A trickle of pearly white cum seeps out from between her thighs, stark against her flushed skin.
<<dialogue $playerAvatar "You" "Feeling better?">>
<<dialogue "img/character/riley/rileysexavatar2.jpg" "Riley" "Much better, sheriff">>
<<dialogue $playerAvatar "You" "I gotta go now">>
@@.option-button;[[Leave|RileyBathroomSex4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileybedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/mary/marymasturbate2.webp" width=100%>
A broken whimper escapes her. Her hand immediately obeys—fingers plunging deeper, faster, palm grinding against her clit with wet, rhythmic slaps that echo in the small booth. Her other hand clutches her breast, squeezing roughly, nails digging into soft flesh as she pinches her nipple hard.
<<dialogue "img/character/mary/marysexavatar3.jpg" "Mary" "Oh God—I’m... I’m trying—">>
<<dialogue $playerAvatar "You" "Harder. Stretch yourself for Me. I want to hear you ruin that pretty pussy">>
<<dialogue "img/character/mary/marysexavatar3.jpg" "Mary" "Ohhh… oh God…">>
@@.option-button;[[Demand Mary to cum for you|MaryConfession5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/mary/marymasturbate3.webp" width=100%>
Mary’s hand is a blur now, her three fingers buried deep, palm slapping wetly against her clit with every frantic thrust. The confessional reeks of her arousal, the floor beneath her already slick with the steady drip of her juices. Her moans have turned into one long, sensual stream.
<<dialogue "img/character/mary/marysexavatar3.jpg" "Mary" "Ohhh… please… I can’t hold it… I’m so close…">>
You let her teeter on the edge just long enough for her thighs to shake uncontrollably, for her breath to come in ragged sobs.
<<dialogue $playerAvatar "You" "Come for Me, Mary. Right now. Let it all out. Show Me how completely you surrender">>
<<dialogue "img/character/mary/marysexavatar3.jpg" "Mary" "Yes—oh God—yes!">>
The words shatter her. A raw, broken cry tears from her throat. Her back arches hard, breasts thrusting forward as her whole body convulses. Her fingers plunge one final time, curling deep, and she comes undone. Wave after wave crashes through her. Her pussy clenches violently around her fingers, a hot rush of wetness gushing out in forceful spurts that splash loudly onto the wooden floor.
<<dialogue $playerAvatar "You" "Your prayers will not go unanswered">>
<<dialogue "img/character/mary/marysexavatar3.jpg" "Mary" "Yes...Father...">>
You quietly sneak out of the confessional, leaving Mary behind, sitting on a lagoon of her own love juice, still processing what just happened.
@@.option-button;[[Leave|MaryConfession6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Carrie leans in, lips already parting, and slides your thick cock into the wet heat of her mouth with a slow, greedy moan. She bathes you in saliva, letting it drip down your shaft in shiny rivulets. Then she seals her lips tight and sucks, hard, cheeks hollowing as her tongue swirls over the swollen head, lapping and teasing the sensitive ridge.
<img src="img/character/carrie/carrieblowjob.webp" width=100%>
<<dialogue "img/character/carrie/carriesexavatar2.jpg" "Carrie" "Mmph... mmph...Glurp… glurp… gluuuuurghp…">>
<<dialogue $playerAvatar "You" "Yes Carrie... Oh Carrie, I miss you so much">>
<<dialogue "img/character/carrie/carriesexavatar7.jpg" "Carrie" "I have to go now">>
<<dialogue $playerAvatar "You" "What? No, please stay with me">>
@@.option-button;[[Snap out of your dream|BackToTheHijackSite5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/starrynight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/carrie/carriesex1.webp" width=100%>
She’s already on the bed, chest still heaving from the mess she made of your cock. You push her onto her side, one of her legs hooked over your forearm, the other stretched long beneath you. The angle opens her completely. You line up and drive in with one brutal thrust. Carrie’s back arches hard, a broken cry ripping out of her raw throat as your cock spears deep into her soaked heat. The sideways angle lets you sink impossibly deeper, the thick head grinding against that spot inside her that makes her whole body jerk.
<<dialogue "img/character/carrie/carriesexavatar4.jpg" "Carrie" "Fuck—yes—right there—">>
You pull back slow, watching your shaft emerge slick and shining with her, then slam home again. Each thrust shoves her forward on the mattress, her tits bouncing, one nipple dragged against the cool sheets while the other is pinched between your fingers
<<dialogue $playerAvatar "You" "You like that, babe?">>
<<dialogue "img/character/carrie/carriesexavatar1.jpg" "Carrie" "Yes! Harder! Fucking wreck me">>
You angle your hips sharper, cock dragging along her front wall with every stroke, and she shatters. Her whole body seizes, pussy spasming violently around you as she comes with a hoarse scream, juices flooding down your shaft, soaking both of you.
@@.option-button;[[Cum inside Carrie|SleepAfterMcMahonHouseVisit2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/starrynight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/carrie/carriecuminside.webp" width=100%>
With a guttural groan you slam in to the hilt and unload, thick, hot ropes of cum flooding her in heavy pulses. You keep thrusting through it, grinding deep, pumping spurt after spurt into her clenching cunt until she’s so full it starts leaking out around your shaft, creamy white streaking down her thighs and soaking the sheets.
<<dialogue "img/character/carrie/carriesexavatar7.jpg" "Carrie" "You fucking bastard! You came inside me? Are you serious right now?">>
She tries to kick you away, but her legs are still trembling too hard to close, your cum already dripping out of her swollen, ruined pussy every time she clenches.
<<dialogue "img/character/carrie/carriesexavatar6.jpg" "Carrie" "We’re pulling a heist next week. You want me throwing up all over the place?">>
<<dialogue $playerAvatar "You" "Babe? What are you talking about? What heist?">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "The heist that landed you in jail and the last time we ever saw each other">>
<<dialogue $playerAvatar "You" "NO!!!">>
@@.option-button;[[Wake up|SleepAfterMcMahonHouseVisit3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/starrynight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You crash into her like you’ve been starving for it. Kissing and licking and sucking every inch of her chest like you’re trying to brand her with your mouth, leaving wet trails and red marks blooming across her skin while she pants your name like a prayer and a curse all at once.
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "Oh my...">>
Rissa shoves you flat on your back, eyes blazing. She swings a leg over and straddles you in one fluid move, thighs trembling with need. Her hand snakes between you, gripping your cock and lines you up with her soaked entrance. One brutal drop and you’re buried to the hilt inside her tight, scalding heat. Her head falls back, a raw, guttural moan ripping out of her as her walls flutter and clench around every inch.
<img src="img/character/rissa/rissacowgirl.webp" width=100%>
<<dialogue "img/character/rissa/rissasexavatar2.jpg" "Rissa" "Fuck, yes—">>
She plants her hands on your knees, nails digging in, and starts riding you like she’s trying to break you. Her tits bounce wildly. You thrust up to meet her, hard enough that her breath hitches, eyes rolling back.
<<dialogue "img/character/rissa/rissasexavatar1.jpg" "Rissa" "Oh God ~ Oh God ~ Oh God ~">>
@@.option-button;[[Turn around|RissaVisit1sex1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You grab her hips hard enough to bruise and flip her in one rough motion. Rissa lets out a startled, hungry laugh as she spins, planting her knees on either side of your thighs, back to you now. Her ass is perfectly round, flushed, still glistening from sweat and everything you’ve already done to her.
Rissa reaches between her legs, grabs your cock, slick with her, and guides you straight back into her dripping cunt from behind. The second you’re lined up she drops, impaling herself with a filthy, broken moan that echoes off the warehouse walls.
<img src="img/character/rissa/rissareversecowgirl.webp" width=100%>
<<dialogue "img/character/rissa/rissasexavatar2.jpg" "Rissa" "Fuuuck, yes, right there">>
She starts riding again, reverse this time, her back arched, spine dipped low, ass bouncing as she slams down over and over. Every thrust makes her cheeks spread just enough for you to watch your cock disappear into her, reappear shiny and soaked, then vanish again. Her pussy lips grip you tight, swollen and red from use.
You sit up slightly, hands clamping onto her hips hard, punishing strokes that make her whole body jolt forward. She braces her hands on your chest, nails digging in, and throws her ass back to meet every thrust.
<<dialogue $playerAvatar "You" "Rissa, fuck, I’m close">>
You feel the heat coil tight at the base of your spine, your thrusts turning erratic. She throws her head back, hair whipping across her sweat-slick shoulders, and slams down harder, grinding deep.
<<dialogue "img/character/rissa/rissasexavatar1.jpg" "Rissa" "Come inside me, please. Fill me up, baby, I want every fucking drop, please, I need it">>
@@.option-button;[[Cum|RissaVisit1sex2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/rissa/rissacreampie.webp" width=100%>
<<dialogue "img/character/rissa/rissasexavatar2.jpg" "Rissa" "Fuck… yes…I can feel you… so much… so warm…">>
That’s it. You drive up one last time, burying yourself as deep as you can get, and let go. Hot, thick pulses surge out of you, rope after rope pumping straight into her clenching heat. Rissa whimpers with every spurt, rocking back to take it deeper, milking you with greedy little squeezes until you’re spent and shaking.
When the last spasm fades, you pull out slow. A thick rush of cum follows, spilling out of her swollen lips and sliding down her thighs in creamy streaks. Rissa stays there on her knees, back arched, chest heaving, looking utterly wrecked.
<<dialogue $playerAvatar "You" "I gotta go">>
You stand, zip up, and grab your jacket from the crate.
<<dialogue "img/character/rissa/rissasexavatar4.jpg" "Rissa" "Thanks for stopping by">>
@@.option-button;[[Leave|RissaVisit1sex2.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
She walks to the center of the warehouse floor, drops to her knees, and starts touching herself; she's masturbating. You shift slightly for a better view and spot her thrusting the dildo into her pussy.
<img src="img/character/rissa/rissamasturbate.webp" width=100%>
She's moaning harder and harder with each thrust until the floor around her becomes a puddle of her love juice.
Then she stands, stumbles once, clumsily cleans up the place, and vanishes into the far end of the warehouse.
@@.option-button;[[Leave|RissaIntro2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/warehouse/warehouse1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Credit</div>
@@.option-button;<<link "Go Back">><<goto $prevPassage>><</link>>@@
If your name isn’t listed here, please refer to the pinned credits notice post on my Patreon.
<b>Developer: DraemGaem
<div class="styled-line"></div>
Special thanks to my patrons:
<table style="width:100%; text-align:left">
<td>Bason's Commoner
Kunggren
TheBlackMan
Striga
</td>
<td>Bason's Elite
DemonDreamz-
Jankollofski
Grim Stryker
Blue_Raptor
don't subscribe
ShadowFalls
Oscar Parnell
RIkijs
R
dims kim
D Lee
</td>
<td>Master Bason
Brandon D
</td>
<td>God Emperor of Bason
Nigthshadow
</td>
</table>
<div class="styled-line"></div>
Characters and Actresses:
<table style="width:100%; text-align:left"><td>
Ex-girlfriend/Carrie Kendrick - Lasirena69
Haley's bestfriend/Mary De Santa - Autumn Falls
Nightclub Owner/Veronica Starling - Lana Rhoades
Carrie's daughter/Haley Kendrick - Angel Youngs
BSD receptionist/Donna Whaley - Lena Paul
Deputy/Selena Lockett - Skylar Snow
Rookie/Riley Bogg - Ellie Nova
Prologue Bartender/Julia Kent - Alyssia Kent
Hotel Manager/Bianca Harrington - Liya Silver
Masseur/Cassie Lannigan - Josephine Jackson
Head nun/Maria Davidson - Crystal White
Doctor/Evelyn Wilson - Angela White
Banker: Gabbie Banks - Gabbie Carter
Gareth's Mom/ Jocelyn Byers - Skye Blue
</td><td>
Danni Varga - Gabriela Lopez
Rissa May - Rissa May
Vicki Campbell - Vicki Chase
Chicken Brother waitress/Santi Santos - Serena Santos
Mayor Secretary/Abigail Norton - Siri Dahl
Hair Stylist/Paola - Paola Hard
Gwen Parker - Jazlyn Ray
Librarian/Elise - Skylar Vox
David's Wife/Reporter/Marlene Hamlin - Tori Black
Jack McMahon's wife/Marina Harris - Jia Lissa
Franny - Elena Vega/ Amanda Hill
Biker girl/Natasha - Natalia Starr
Sex shop Owner/Tara Thompson - Cubbi Thompson
Room 418 Occupant/Olivia Pope - Scarlit Scandal
</td>
</table>
Others: alanarose8082, Olga Pavlenko, frameless_erotic
OF model:
Madelynnhen, Blxxdbunny, Leah Wilde, ivanochka, atomicbrunette18, MariaMarry, vickicandy, anastasiaclaire, sandra_hot, Steph Kegels, Simoniliciousxx, Cosmic Kitti, interwebzgurl
Swindler girl Kate: Katekuray
Swindler girl Olivia: Olivia Casta
Swindler girl Sandra: Hailey Queen
</b>
@@.option-button;<<link "Go Back">><<goto $prevPassage>><</link>>@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/halloffame.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/various/hijackbikes.webp" width=100%>
You and David drop from the ridge, helmets on, faces masked, and the bikes take the slope in a spray of gravel. The night is a smear of smoke, heat, and the taste of sulfur. You hear men shouting. Greg’s voice cuts through, quick and brutal.
<<dialogue "img/character/greg/gregavatar.png" "Greg" "Fuck, the car is down—get out! Get out!">>
Greg’s men pour from the cab and the sides of the truck, disoriented.
You and David charge in with weapons drawn, riddling the car with bullets before they can regroup. Still, a few manage to grab a gun and point it at you
<<nobr>>@@.option-button;[[Fight|TruckHijackGunFight]]@@
@@.option-button;[[Skip|TruckHijackDefeatThug]]@@<</nobr>>
<<run hideSidebar()>>
<<set $GunEnemyCount to 4>>
<<set $GunTimeLimit to 20>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/route13/route13atnight.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Hotel Restaurant</div>
You pay at the counter, grab a plate, and immediately go to eat. Towering trays of roasted beef glazed with honey, crispy fried chicken, steaming pans of garlic butter shrimp, whole baked salmon, fresh sushi rolls lined in neat rows, creamy mashed potatoes, cheesy lasagna, fragrant fried rice, stir-fried noodles, dumplings, soups, salads, pastries, chocolate fountains, cakes, fruit platters.
You eat everything you can reach, piling your dishes high and going back again and again until you can barely move, absolutely stuffed from devouring as much as you possibly can. The buffet didn’t stand a chance.
@@.option-button;[[Leave|Third Floor]]@@
<<set $lastate to setup.changeDate($now, 'days', 3)>>
<<set $MCMoney -= 100>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelbuffet.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You drop into your chair and spread out everything you’ve gathered about Jack McMahon. The more you look at it, the more one thing becomes clear.
McMahon keeps all of his money in the bank. And now Marina says he’s preparing a lot of money for something big. You can already see where this is going. If he hires an army, sicarios, mercenaries, you won’t be dealing with a gang war anymore. It’ll be a massacre. He’ll take out the bikers, the mafia, the nightclub, the drug kingpin, everyone.
Unless you stop the money before it ever moves...
A plan starts to form in your head: a bank robbery, just like the good old days.
You can’t rob a bank on your own, and you definitely can’t ask the police or the mayor to help you. You pull out your phone and scroll to Joe’s number. He’s the only one who can help you.
@@.option-button;[[Call Joe|SheriffOfficePlanning1Part2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The phone rings.
Once.
Twice.
Three times.
No answer.
You frown, try again.
Still nothing.
Great. Looks like Joe won’t be able to help you with this one.
You lean back in your chair, eyes drifting to the ceiling, stomach tightens. There’s another crew member who can help you, and she’s right within reach: Carrie.
But convincing her? That’s the real heist.
She’s still furious at you. Those last words she threw at you at the party still burn in your memory. You haven’t talked to her since. But you’ve got no other choice, and you’ll have to face her anyway.
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@
<<set $now to setup.changeDate($now, 'minutes', 45)>>
<<set $CarriePissed = 0>>
<<set $CarrieHouseSpying1 = 1>>
<<set $SheriffOfficePlanning1 = 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mountain/mountscarletveil.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Continue with Carrie's guide")>>
<<run setup.showNotification("💋New Character Guide Unlocked: Carrie!")>>
<<run updateGuideTextForStoryline("Carrie", "Spy on Carrie at her house")>><<if !$DanniSexScene1>>
<<set $rudeBitch1 = 0>>
<<set $DanniReportTime1 to setup.changeDate($now, 'days', 3)>>
<<set $Danni1 = 1>>
<<set $now to setup.changeDate($now, 'hours', 3)>>
<<set $DanniSexScene1 = 1>>
<<set $DanniHouseStalk = 1>>
<<run setup.showNotification("💋New Character Unlocked: Danni!")>>
<<run updateGuideTextForStoryline("Danni", "Danni will come to the BSD. Time: "+ formatGameDateTime($DanniReportTime1))>>
<<goto "DanniHouse">>
<<elseif $DanniSexScene1 == 1>>
<<goto "Danni Hint">>
<</if>><<if !$DanniSexScene2>>
<<set $DanniSexScene2 = 1>>
<<set $moral -= 5>>
<<set $Danni2 = 0>>
<<set $Danni3 = 1>>
<<set $tempdate to setup.changeDate($now, "days", 3)>><<set $DanniReportTime2 to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 9, 0)>>
<<set $now to setup.changeDate($now, 'hours', 3)>>
<<run updateGuideTextForStoryline("Danni", "Danni goes to the police to file another report. Time: "+ formatGameDateTime($DanniReportTime2))>>
<<goto "North Residential Area">>
<<elseif $DanniSexScene2 == 1>>
<<goto "Danni Hint">>
<</if>>
<<if !$RileySexScene1>>
<<set $now to setup.changeDate($now, 'hours', 5)>>
<<set $RileyHouse1 = 0>>
<<set $RileySex1 = 1>>
<<set $RileySexScene1 = 1>>
<<run updateGuideTextForStoryline("Riley", "Continue with Chapter 1 guide")>>
<<goto "BSD">>
<<elseif $RileySexScene1 == 1>>
<<goto "Riley Hint">>
<</if>><<if !$RileySexScene2>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<run addWallpaper("img/character/riley/rileywallpaper1.jpg")>>
<<run setup.showNotification("📸New Wallpaper Unlocked!")>>
<<run setup.showNotification("😈You can have sex with Riley at work")>>
<<run updateGuideTextForStoryline("Riley", "You have reached the end of this update")>>
<<goto "BSD">>
<<set $RileyBSDSex = 1>>
<<set $RileySexScene2 = 1>>
<<elseif $RileySexScene2 == 1>>
<<goto "Riley Hint">>
<</if>><<if !$CassieSexScene1>>
<<set $now to setup.changeDate($now, 'hours', 6)>>
<<set $Case1Solve = 2>>
<<set $CassieSexScene1 = 1>>
<<run addWallpaper("img/character/cassie/cassiewallpaper1.jpg")>>
<<run setup.showNotification("📸New Wallpaper Unlocked!")>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Report to the mayor in Town Hall")>>
<<run updateGuideTextForStoryline("Cassie", "Continue with Franny guide")>>
<<goto "Massage Parlor">>
<<elseif $CassieSexScene1 == 1>>
<<goto "Cassie Hint">>
<</if>><<if !$MariaSexScene1>>
<<set $now to setup.changeDate($now, 'hours', 9)>>
<<set $MariaTalk1 = 0>>
<<set $CircleOfSins1 = 1>>
<<set $MariaSexScene1 = 1>>
<<run updateGuideTextForStoryline("Maria", "Continue with Chapter 1 guide")>>
<<goto "West Side">>
<<elseif $MariaSexScene1 == 1>>
<<goto "Maria Hint">>
<</if>>
<<if !$MarleneSexScene1>>
<<set $now to setup.changeDate($now, 'hours', 6)>>
<<set $DavidDiningInvite1 = 0>><<set $unlockedCharacters.marlene = true>><<set $DavidConvince1 = 1>>
<<set $MarleneSexScene1 = 1>>
<<run addWallpaper("img/character/marlene/marlenewallpaper1.jpg")>>
<<run setup.showNotification("📸New Wallpaper Unlocked!")>>
<<run setup.showNotification("💋New Character Unlocked: Marlene!")>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Talk to David at his desk")>>
<<run updateGuideTextForStoryline("Marlene", "Continue with Chapter 1 guide")>>
<<goto "DavidHouse">>
<<elseif $MarleneSexScene1 == 1>>
<<goto "Marlene Hint">>
<</if>><<if !$MarleneSexScene2>>
<<set $MarleneTalk1 = 0>>
<<set $DavidJoinIn1 = 1>>
<<set $MarleneSexScene2 = 1>>
<<run addWallpaper("img/character/marlene/marlenewallpaper2.jpg")>>
<<run setup.showNotification("📸New Wallpaper Unlocked!")>>
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<run updateGuideTextForStoryline("Marlene", "You have reached the end of this update")>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to the wine storage")>>
<<goto "DavidHouse">>
<<elseif $MarleneSexScene2 == 1>>
<<goto "Marlene Hint">>
<</if>><<if !$EvelynSexScene1>>
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $EvelynTalk1 = 0>>
<<set $EvelynTalk2 = 1>>
<<set $unlockedCharacters.evelyn = true>>
<<set $EvelynSexScene1 = 1>>
<<run addWallpaper("img/character/evelyn/evelynwallpaper1.jpg")>>
<<run setup.showNotification("📸New Wallpaper Unlocked!")>>
<<set $tempdate to setup.changeDate($now, "days", 7)>><<set $DoctorVisit1 to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 8, 0)>>
<<run updateGuideTextForStoryline("Evelyn", "Talk to Evelyn at the hospital. Time: "+ formatGameDateTime($DoctorVisit1))>>
<<goto "Hospital">>
<<elseif $EvelynSexScene1 == 1>>
<<goto "Evelyn Hint">>
<</if>>
<<if !$CorySexScene1>>
<<addItem "HaleyExam" "img/item/haleyexam.jpg" "Haley's exam result." "" "Paper" 5 1>><<set $unlockedCharacters.cory = true>>
<<set $HaleyExamSteal = 0>>
<<set $CorySexScene1 = 1>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<run setup.showNotification("💋New Character Unlocked: Cory!")>>
<<run updateGuideTextForStoryline("Haley", "Give Haley the exam result at her house (Carrie's house)")>>
<<run updateGuideTextForStoryline("Cory", "You have reached the end of this update")>>
<<goto "University">>
<<elseif $CorySexScene1 == 1>>
<<goto "Cory Hint">>
<</if>><<if !$RissaSexScene1>>
<<set $now to setup.changeDate($now, 'hours', 1)>><<set $RissaWarehouse = 1>><<set $RissaIntro = 0>>
<<set $RissaSexScene1 = 1>>
<<run updateGuideTextForStoryline("Rissa", "Talk to Rissa when she's is working at the warehouse")>>
<<goto "Warehouse">>
<<elseif $RissaSexScene1 == 1>>
<<goto "Rissa Hint">>
<</if>><<if !$RissaSexScene2>>
<<set $RissaSexScene2 = 1>>
<<set $RissaFirstMeet =0>>
<<set $RissaSecondMeet =1>>
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<if $DavidReport1 == 0>>
<<run updateGuideTextForStoryline("Rissa", "Go to the warehouse at night again")>>
<<else>>
<<run updateGuideTextForStoryline("Rissa", "Continue with Chapter 1 guide")>>
<</if>>
<<goto "Warehouse">>
<<elseif $RissaSexScene2 == 1>>
<<goto "Rissa Hint">>
<</if>>
<<if !$RissaSexScene3>>
<<set $RissaSexScene3 = 1>>
<<set $now to setup.changeDate($now, 'hours', 3)>>
<<set $GregMeeting = 1>>
<<set $RissaSecondMeet = 0>>
<<set $RissaBrother = 0>>
<<run addWallpaper("img/character/rissa/rissawallpaper1.jpg")>>
<<run setup.showNotification("📸New Wallpaper Unlocked!")>>
<<run updateGuideTextForStoryline("Rissa", "Continue with Chapter 1 guild")>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to Salt's bar")>>
<<goto "Warehouse">>
<<elseif $RissaSexScene3 == 1>>
<<goto "Rissa Hint">>
<</if>>
<<if !$RissaSexScene4>>
<<set $RissaSexScene4 = 1>>
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<goto "Warehouse">>
<<elseif $RissaSexScene4 == 1>>
<<goto "Rissa Hint">>
<</if>>
<<if !$RissaSexScene5>>
<<set $RissaSexScene5 = 1>>
<<set $RissaThirdMeet = 0>>
<<set $now to setup.changeDate($now, 'hours', 3)>>
<<run updateGuideTextForStoryline("Rissa", "You have reached the end of this update")>>
<<goto "Warehouse">>
<<elseif $RissaSexScene5 == 1>>
<<goto "Rissa Hint">>
<</if>>
<<if !$VickiSexScene1>>
<<set $VickiSexScene1 = 1>>
<<set $now to setup.changeDate($now, 'hours', 4)>>
<<set $FootBallMatch to undefined>>
<<run updateGuideTextForStoryline("Vicki", "You have reached the end of this update")>>
<<goto "Football field">>
<<elseif $VickiSexScene1 == 1>>
<<goto "Vicki Hint">>
<</if>>
<<if !$MarySexScene1>>
<<set $MarySexScene1 = 1>>
<<set $MaryConfession1 = 0>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<if $Gareth1>>
<<run updateGuideTextForStoryline("Mary", "Investigate Gareth's house in east resident area (It called Jocelyn house)")>>
<<run updateGuideTextForStoryline("Haley", "Investigate Gareth's house in east resident area (It called Jocelyn house)")>>
<<set $Gareth1 = 1>>
<<else>>
<<run updateGuideTextForStoryline("Mary", "Continue with Haley guide")>>
<<set $Gareth1 = 2>>
<</if>>
<<goto "Church">>
<<elseif $MarySexScene1 == 1>>
<<goto "Mary Hint">>
<</if>>
<<if setup.isOpeningHours($now)>>
<<goto "Wine Storage">>
<<else>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<goto "BackToTheHijackSite6">>
<</if>><<if !$CarrieSexScene2>>
<<set $CarrieSexScene2 = 1>>
<<set $StreetIncidentCall1 = 1>>
<<set $SleepAfterMcMahonHouseVisit = 0>>
<<run setup.showNotification("🚨Incoming Call")>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Incoming Phone call from Riley")>>
<<goto "Wine Storage">>
<<elseif $CarrieSexScene2 == 1>>
<<goto "Carrie Hint">>
<</if>>
<img src="img/character/carrie/carriemasturbating.webp" width=100%>
Carrie’s sprawled flat on the deck chair, legs lazily spread. She’s wearing a thin red sundress (so loose it’s slipped off one shoulder, hem bunched high on her thighs) and a pair of sunglasses that hide her eyes even in the dark. The dress is damp from the humidity, clinging to her breasts, nipples stiff and visible through the fabric.
She’s already soaked. You can hear it, soft, wet sounds every time her fingers dip inside.Her head is thrown back, eyes closed, lips parted.
<<dialogue "img/character/carrie/carriesexavatar4.jpg" "Carrie" "Oh, $PlayerInput... Why did you comeback?">>
She bites her bottom lip, sunglasses still on, head tipped back against the cushion. The hand on her breast squeezes lightly, then pinches just enough to make her bite her lip. Her fingers between her legs move a little faster, slick sounds barely audible over the quiet lap of pool water.
<<dialogue "img/character/carrie/carriesexavatar4.jpg" "Carrie" "$PlayerInput...">>
She comes with a shaky exhale. A warm rush of wetness soaks her fingers and the cushion beneath her, a soft squirt that leaves the dress clinging to her skin in a darker patch. She keeps rubbing gently through it, drawing it out, until her hand finally stills. A few slow breaths. She smooths the dress down over her thighs, pushes the sunglasses back into place, and leaves.
@@.option-button;[[Leave|CarrieHouse]]@@
<<set $CarrieHouseSpying1 = 0>>
<<set $CarrieGymSpying1 = 1>>
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/carriehouse/carriehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Carrie", "Spy on Carrie at the gym")>>You follow Carrie to the gym, hoping to learn more about how she’s been living all these years. The place is busier than usual, the rhythmic thud of gloves hitting pads echoing off the walls. Carrie’s in the boxing ring with her trainer, wrapped hands, sweat-damp hair tied back. She moves with sharp, focused precision—jab, cross, hook, each strike snapping through the air.
<img src="img/character/carrie/carrieboxing.webp" width=100%>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Hiya! Hiya! hunh!">>
You just stand there, blending into the crowd, letting people walk past as you watch her work. Her breathing is steady, her form clean. Every punch lands like she’s trying to break through something that isn’t the pads. She looks stronger than you remember. You decide there’s no avoiding it — you need to talk to her face-to-face.
@@.option-button;[[Leave|Gym]]@@
<<set $CarrieGymSpying1 = 0>>
<<set $CarriePhoneCall1 = 1>>
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/gym.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Call Carrie")>>
<<run updateGuideTextForStoryline("Carrie", "Call Carrie")>><<set $tempdate to setup.changeDate($now, "days", 1)>><<set $CarrieParkMeetTime to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 15, 0)>>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Hello?">>
<<dialogue $playerAvatar "You" "Hey Carrie">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" ". . .">>
<<dialogue $playerAvatar "You" "It's me">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "How did you find me?">>
<<dialogue $playerAvatar "You" ", , ,">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "It was Joe, wasn’t it? I knew it">>
<<dialogue $playerAvatar "You" "Twenty years, Carrie… where were you?">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "I tried to visit… I drove to that gate God knows how many times... But I had responsibilities… I had a daughter, I had a husband who loved me">>
<<dialogue $playerAvatar "You" "It's me, Carrie... I love you">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "I know. I can't. Please… you’re gonna have to leave town. Please. Please">>
<<dialogue $playerAvatar "You" "Okay… you moved on. I get it">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" ". . .">>
<<dialogue $playerAvatar "You" "I’ll leave. But can you at least meet me once? For old times’ sake">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Okay… meet me at the park, <<= setup.getFormattedTime($CarrieParkMeetTime, '24hour-seconds')>>, tomorrow">>
<<dialogue $playerAvatar "You" "Thank you">>
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@
<<set $CarriePhoneCall1 = 0>>
<<set $CarrieParkTalk1 = 1>>
<<set $now to setup.changeDate($now, 'minutes', 15)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mountain/mountscarletveil.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Meet Carrie at the park. Time: " + formatGameDateTime($CarrieParkMeetTime))>>
<<run updateGuideTextForStoryline("Carrie", "Continue with Chapter I Guide")>>You arrive at the park at exactly 3 PM.
Carrie is already there, sitting on a bench under the shade of a big oak tree. Arms crossed, one leg bouncing. When she finally notices you approaching, she startles just a little. Her posture stiffens.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" ". . .">>
<<dialogue $playerAvatar "You" "Carrie, you’re still as stunning as you were that night at the party">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Don’t start with that, I don’t have time for games">>
<<dialogue $playerAvatar "You" "You’ve built yourself a nice place while I was gone. Seems solid... When did you move here?">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "As soon as I got out">>
<<dialogue $playerAvatar "You" "Good for you">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "What’s it gonna take to get you to leave?">>
<<dialogue $playerAvatar "You" "I can’t leave. I’m the sheriff now. Like you said, I’ve got responsibilities">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "A sheriff? Are you kidding me?">>
<<dialogue $playerAvatar "You" "You used to have more faith in me">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "You could’ve led Jackal straight to me. Why are you doing this?">>
<<dialogue $playerAvatar "You" "You know why">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" ". . .">>
@@.option-button;[[Talk|CarrieParkTalk2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/park/bench.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "At your dear husband’s request, I’m burning Jack McMahon to the ground, you know this man right?">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Of course I know him. You’re really gonna help my husband take them all down?">>
<<dialogue $playerAvatar "You" "I’d rather steal everything Jack has and leave this town with you by my side">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Me? No chance">>
<<dialogue $playerAvatar "You" "Fine, help me bankrupt this asshole, then I’ll walk away. Consider it payment for 20 years...">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" ". . .">>
<<dialogue $playerAvatar "You" "I know you too well. You chose to stay here — don’t pretend otherwise. This town is a goldmine, and you know it. Otherwise, you would’ve moved as far away from the Boss as possible">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Fine. I’ll help you">>
<<dialogue $playerAvatar "You" "Don’t tell me that in the 20 years you’ve lived here, you never once thought about robbing the bank. Did you?">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" ". . .">>
<<dialogue $playerAvatar "You" "Come on">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "I did... I even planned it, but it never went anywhere. I have observed the building, to rob it, you need at least four crew members in the take, and that’s already counting you and me">>
<<dialogue $playerAvatar "You" "Send me the details, and I’ll handle the rest">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Okay, I’ve gotta go now">>
For a moment, Carrie eyes linger on you, something conflicted there, something unspoken, but she shuts it down fast. Then she walks off down the path, leaving you alone as the late afternoon sun sinks behind the trees.
@@.option-button;[[Leave|Park]]@@
<<set $CarrieParkTalk1 = 0 >>
<<set $BankInvestigation1 = 1 >>
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/park/bench.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Buy a Purple Fask in the the sex shop then Investigation the Bank (Talk to Gabbie first)")>>
<<run updateGuideTextForStoryline("Carrie", "You have reached the end of this update")>>The bell over the door chimed as you stepped into the salon—warm lights, soft pop music, the faint smell of hairspray hanging in the air. Before you could even take a proper look around, a blonde blur appeared in front of you.
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Hi! You must be here for a haircut, right?!">>
<<dialogue $playerAvatar "You" "Err...">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Come on, come on, sit here. I’ve been dying to try a new style on someone with your hair">>
You barely had time to open your mouth before you were planted firmly in the chair. She spun it around with practiced speed.
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "I’m Paola, what's your name?">>
<<dialogue $playerAvatar "You" "I'm $PlayerInput">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "That’s a lovely name, and a lovely name deserves a lovely haircut. I'm obsessed with making people look amazing">>
<<dialogue $playerAvatar "You" "Actually I...">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Now—listen. You could pull off so many looks. We’ve got a textured crop, a classic taper, a messy modern fringe—ooh, or a faded undercut! Actually, wait, let me show you">>
She grabbed a tablet and started swiping through photos faster than your eyes could track, each one more dramatic than the last
<<dialogue $playerAvatar "You" "Uh, I just need—">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "—Something unconventional! Exactly!">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Trust me. I know what you need">>
You weren’t sure you’d agreed to anything, but at this point Paola’s energy had its own gravity.
@@.option-button;[[Wait|PaolaHaircut2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hairsalon/hairsalon.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Minutes slipped away as she shaped, trimmed, brushed, sprayed—always moving, always cheerful, always explaining what she was doing even though you understood none of it. Finally, after thirty minutes of spirited commentary and relentless precision, she stepped back with a flourish.
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Done!">>
Paola was waiting behind you, arms crossed proudly, eyes glittering.
<<dialogue $playerAvatar "You" "It’s good, but… I kinda prefer something more… breathable?">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Breathable? Oh my god. You’ve been suffocating this whole time!">>
<<dialogue $playerAvatar "You" "That’s not—">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "No, no, say no more. I'll fix you">>
Before you could protest, the clippers buzzed again.
@@.option-button;[[Wait|PaolaHaircut3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hairsalon/hairsalon.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Paola circled you like a hawk, humming with the confidence of someone who absolutely believed she understood your soul better than you did.
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Now that is breathable">>
You stared at your reflection. A perfectly smooth, perfectly bald, perfectly polished head gleamed back at you like it was powered by a lightbulb inside your skull.
<<dialogue $playerAvatar "You" "I—I feel like I’m naked">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Yes! Finally! Honesty! That’s the spirit">>
<<dialogue $playerAvatar "You" "No, in a bad way">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Yes! You’re right. You’re absolutely right, say no more. I'll fix you">>
She was already clipping, knotting, braiding with lightning speed. Her hands moved so fast you barely processed what was happening. She leaned in close, weaving with meticulous artistry, tongue poking from the corner of her mouth in concentration.
@@.option-button;[[Wait|PaolaHaircut4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hairsalon/hairsalon.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "You are now a man of culture">>
By the time you recover from the sudden transformation, you can finally confirm what you came here to find out in the first place. This woman could disguise you well enough for the take. You took a breath, steadying yourself.
<<dialogue $playerAvatar "You" "Paola… I need my original look back">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Easy. Sit">>
In less than ten minutes—through a blur of combs, sprays, clips, and some kind of magic she didn’t bother explaining—you were staring at your old self again. Same cut, same shape, same everything. It was like she’d never touched you. You pulled out your phone and showed her a picture. A man. Omar Serviceman. Greg told you He is McMahon’s right hand. You’re not going to take McMahon down while he’s still alive.
<<dialogue $playerAvatar "You" "Paola… can you make me look exactly like him?">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Oh, absolutely. The bone structure’s a bit different, but I can add some silicone to build it up. The hair’s easy, and the details… yeah, I could do this today if you want">>
<<dialogue $playerAvatar "You" "Not yet. Keep the image. I’ll need you soon">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Is this… dangerous? Because you’re giving me dangerous energy right now">>
<<dialogue $playerAvatar "You" "I’m the new sheriff of Bason. You don’t recognize me from… anywhere?">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "You? Sheriff? Seriously?">>
<<dialogue $playerAvatar "You" "Yeah. And what I’m about to ask you to do stays between us. No one can know">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Ooh, I like secrets. You tell me when. I’ll make you look like anyone">>
<<dialogue $playerAvatar "You" "I’ll come back soon">>
@@.option-button;[[Leave|Hair Salon]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $PaolaTalk1 = 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hairsalon/hairsalon.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<if $MarinaRescue == 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to Spade Mansion at night")>>
<<elseif $McMahonJailConfront == 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to BSD in the morning.\n McMahon will be released on: "+ formatGameDateTime($JackMcMahonReleaseTime))>>
<<elseif $BankHeist1 == 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Call Carrie to start the bank heist.\n McMahon will be released on: "+ formatGameDateTime($JackMcMahonReleaseTime))>>
<<elseif $MarinaCall3 == 1 and $HowardTalk2 <= 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "✅Go to Hair Salon\n🔲Go to the Hotel Lounge\n🔲Call Marina")>>
<<elseif $MarinaCall3 == 1 and $HowardTalk2 == 2>>
<<run updateGuideTextForStoryline("Chapter I Guide", "✅Go to Hair Salon\n✅Go to the Hotel Lounge\n🔲Call Marina")>>
<<elseif $MarinaCall3 == 0 and $HowardTalk2 <= 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "✅Go to Hair Salon\n🔲Go to the Hotel Lounge\n✅Call Marina")>>
<<else>>
<<run updateGuideTextForStoryline("Chapter I Guide", "✅Go to Hair Salon\n✅Go to the Hotel Lounge\n✅Call Marina\n🎯Go to BSD. Time: "+ formatGameDateTime($MarinaAbuseProofTime))>>
<</if>>
<<run updateGuideTextForStoryline("Paola", "You have reached the end of this update")>>You spent the rest of the afternoon scouting the bank.
You walked in through the front doors like any other customer, expression calm and official. No one questioned you. Why would they?
Inside, you let your eyes work.
You studied the security guards first.
Two at the front, one old and bored, one younger but glued to his phone. Their rotation seemed loose, lazy even. They switched posts roughly every thirty minutes, but without precision.
Next, you drifted toward the far side of the lobby, “inspecting” a wall fixture while watching the cameras.
Four in the lobby.
Two pointed at the vault hallway.
One outside, watching the parking lot.
You slowed near the vault corridor. The massive steel door sat at the end like a sleeping giant. The keypad was new. The locks were old. A combination of modern tech and aging metal.
The bank has made decent improvements since Carrie created her plan.
@@.option-button;[[Observe more|BankInvestigation2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/bankinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Purple Flask</h2><img src="img/item/aphrodisiacflask.png" width =100%>
<p><strong>Type:</strong> Flask</p><p><strong>Full Description:</strong> A flask filled with purple liquid.</p>
<div class="location-banner">Park</div>
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isMorning($now)>><<set $Mushroom1Chance = 5>>
<<elseif setup.isAfternoon($now)>><<set $Mushroom1Chance = 10>>
<<elseif setup.isEvening($now)>><<set $Mushroom1Chance = 15>>
<<elseif setup.isNight($now)>><<set $Mushroom1Chance = 20>>
<</if>>
<<set $Mushroom1FindingChance = Math.floor(Math.random() * 100)>>
<<if $Mushroom1FindingChance <= $Mushroom1Chance>>
@@.option-button;<<link "Is that a mushroom?">><<addItem "Red Mushroom" "img/item/mushroom1.png" "Red mushroom, Maybe edible" "fill your stomach." "Consumable" 50 1>><<goto "ParkDept1">><</link>>@@<</if>>
@@.option-button;[[Mushroom hunting|ParkDept1]]@@
<<if $energy >= 10>>
@@.option-button;<<link "Walk">><<set $Endurance += 1>><<set $energy to Math.max($energy - 10, 0)>><<set $maxEnergy += 1>><<run setup.showNotification("Your Endurance has increased by 1")>><<run setup.showNotification("Your max energy has increased by 1")>><<goto "ParkDept1">><</link>>@@
<<else>>
@@.option-button-disabled;Insufficient energy@@<</if>>
@@.option-button;[[Leave the park|Park]]@@
<</nobr>>
<<set $now to setup.changeDate($now, 'minutes', 55)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/park/parktrail.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Sex Shop</div>
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
<<if !$TaraFirstMeet and $Charisma >= 5 and $energy >= 10>>
@@.option-button;<<link "Talk to the clerk">><<goto "TaraFirstMeet">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif !$TaraFirstMeet>>
@@.option-button-disabled;Talk to the clerk • 💬 Charisma 5 •⚡ Energy 10@@<</if>>
<<else>>
<<goto "Sex Shop">>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/sexshop/sexshop1.png][SexShopItems]]>><</button>>
<div class="location-name"><b>Shopping</b></div>
</td>
<td>
<<button [img[img/location/sexshop/potionmakingcorner.jpg][SexShopPotion]]>><</button>>
<div class="location-name"><b>Making potion</b></div>
</td>
<td>
<<button [img[img/location/sexshop/sexshop.png][Sex Shop]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if $TaraTalk1 == 1>><<goto "TaraTalk1">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/sexshop3.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Garlic Necklace</h2><img src="img/item/garlicnecklace.png" width =100%>
<p><strong>Type:</strong> Flask</p><p><strong>Full Description:</strong> A necklace made of garlic</p>
You were standing near the teller counters, when a familiar voice cut through the noise.
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Sheriff?">>
<<dialogue $playerAvatar "You" "Hi Gabbie">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Are you here checking on your salary again?">>
<<dialogue $playerAvatar "You" "Yeah, I’ve been too busy with work. I haven’t had time to withdraw any">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "No biggie. Here, let me help you with that">>
<<dialogue $playerAvatar "You" "Thank you, Gabbie">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "You’ve got $<<print $MoneyInBank>> in your account. Do you want to withdraw all of it?">>
<<dialogue $playerAvatar "You" "Wow, that’s quite a lot. Sure, that’d be great">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Right away">>
<<dialogue $playerAvatar "You" "Listen… I haven’t made many friends since I came here. Want to grab dinner? My treat">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Alright. Sure. I could use a break">>
<<dialogue $playerAvatar "You" "I’ll wait for you, no rush">>
@@.option-button;[[Wait|BankInvestigation3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/bankinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>That night, you and Gabbie walked into one of the nicer restaurants in the mall. The two of you settled into a booth, and once the waiter left, you steered the conversation exactly where you needed it.
<<dialogue $playerAvatar "You" "So, Gabbie, you’ve been at the bank for what… five years?">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Seven, started as a teller. Now I manage payroll, certain vault logs, some clearance authorizations… boring stuff, honestly">>
<<dialogue $playerAvatar "You" "Sounds important">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Important, yes. Exciting, no. My whole week is spreadsheets, signatures, and handling the safe deposit box's clients">>
<<dialogue $playerAvatar "You" "safe deposit box?">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Yeah, it’s part of my department. If you’ve got anything… valuable, sentimental, whatever—it’s safer with us than anywhere in Bason">>
<<dialogue $playerAvatar "You" "Really?">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "A lot of powerful people in this town use it">>
<<dialogue $playerAvatar "You" "I’ll keep that in mind">>
The meal went smoothly, with Gabbie opening up more than you expected. By the time dessert came, she was smiling like she hadn’t had a night like this in a while.
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "So…You wanna end the night here?">>
<<dialogue $playerAvatar "You" "You got something in mind?">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Yeah. Let me return the favor. There’s a nightclub on the west side of town, and drinks are on me">>
<<dialogue $playerAvatar "You" "Sure, I can’t refuse free drinks">>
@@.option-button;[[Leave|BankInvestigation4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/restaurant.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The nightclub is alive the moment you step inside—bass rolling like distant thunder, lights cutting through the haze in sharp electric strokes. Gabbie grabs your wrist with surprising confidence and pulls you toward the bar.
A couple shots turn into a couple more. She laughs easily, her cheeks warmed by the alcohol, the stress of the workday melted into the pulse of the music.
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Come on, Sheriff, you can’t just stand there and look scary all night">>
Before you can answer, she’s already sprint to the dance floor. You wait until she’s deep in the floor, arms up, hips rolling, sweat already shining on her collarbones. Then you move. The purple flask comes out of your pocket. Three drops, no more. The liquid is clear until it hits the ice in her rum and coke, then blooms a faint ultraviolet that vanishes in the club lights. You slide the drink to the edge of the pickup rail, right where she left it. Two minutes later she’s back, flushed and grinning, hair stuck to her cheek.
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "God, I needed that">>
She grabs the glass and chugs it in one go. You watch her pupils blow wide almost instantly.
<<dialogue $playerAvatar "You" "You okay?">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Whew. That rum is strong tonight. I feel hot. Like… floaty">>
<<dialogue $playerAvatar "You" "It’s getting late. Do you want to head home?">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Yea...">>
Her words slur just enough. Her guard is dissolving in real time. You guide her toward the long way around the dance floor, past the bathrooms, toward the side exit that opens onto an alley.
@@.option-button;[[Leave|GabbieDrugSex1]]@@
<<run hideSidebar()>>
<<audio "NightClub" play loop>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/nightclub.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You get Gabbie through the front door of her apartment, one arm around her waist, her weight leaning heavy against you. The drug is working exactly as advertised—her cheeks flushed, eyes glassy, that loose, dreamy smile plastered across her face.
<<dialogue "img/character/gabbie/gabbiesexavatar2.jpg" "Gabbie" "Home sweet home, God, why’s it so hot in here?">>
<<dialogue $playerAvatar "You" "I’ll get you some water">>
You close the door behind you, lock it. The click sounds louder in the quiet.
Gabbie shrugs out of her jacket, lets it fall to the floor without a second thought. She’s wearing a thin black tank top now, the fabric clinging to her skin with a faint sheen of sweat. She fans herself with one hand, breathing a little faster.
She steps closer, close enough that you can feel the heat radiating off her. Her hands find your chest, fingers curling into your shirt.
<<dialogue "img/character/gabbie/gabbiesexavatar2.jpg" "Gabbie" "I don’t know what’s wrong with me. I just… I need…">>
<<dialogue $playerAvatar "You" "Gabbie?">>
She presses her body against yours, hips rolling slow, instinctive. A soft moan escapes her throat when she feels you respond. Her mouth finds your neck, open and wet, teeth grazing skin
<<dialogue "img/character/gabbie/gabbiesexavatar2.jpg" "Gabbie" "Please, I’m burning up. Touch me. I need you to touch me">>
Her hands are already sliding lower, tugging at your belt, desperate, clumsy with want. The drug has stripped away every inhibition, turned her body into a live wire. She’s not thinking straight, why she's like this, why she suddenly feels like she’ll die if you don’t take her right there against the wall.
@@.option-button;[[Fuck her|GabbieDrugSex2]]@@
@@.option-button;[[Refuse Sex|GabbieDrugSex1.1]]@@
<<run hideSidebar()>>
<<audio "NightClub" stop>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gabbiehouse/gabbiehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.4) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You take a seat near the window, trying to enjoy some peace and quiet, when a burst of laughter pulls your attention.
An old man sits in a leather armchair, relaxed, surrounded by a small circle of girl. Curiosity gets the better of you, and you drift a little closer.
<<dialogue "img/character/others/hotelgirl1.png" "Girl 1" "No way. You’re messing with us. Do mine">>
The old man smiles, clears his throat, and then speaks.
<<dialogue "img/character/howard/howardavatar1.png" "Old man" "👱🏼♀️~Molly, you are my best friend, but if you wear that dress one more time, I swear I'll sleep with your boyfriend~👱🏼♀️">>
<<dialogue "img/character/others/hotelgirl1.png" "Girl 1" "Hey! I never said that">>
The group erupts in cheers, the girl covering her mouth in shock while the others clap and laugh.
<<dialogue "img/character/others/hotelgirl2.png" "Girl 2" "That's so you">>
<<dialogue "img/character/others/hotelgirl3.png" "Girl 3" "AHAHAHAHAHA! You are so mean">>
<<dialogue "img/character/others/hotelgirl1.png" "Girl 1" "Shut up!">>
It is uncanny, but also impressive. The pitch, the cadence, even the nervous lilt at the end of her sentences. For a split second, it sounds like she is standing right beside you.
The old man gives a modest shrug, clearly enjoying the attention.
<<dialogue "img/character/howard/howardavatar1.png" "Old man" "Years of practice, ladies">>
You watch the exchange for a few more seconds, the laughter, the ease with which the old man slips into other people’s voices. An idea clicks into place in your head.
If this old man can copy Jack McMahon’s voice, this might actually work.
You step forward, clearing your throat politely. The old man turns, studying you with sharp, experienced eyes.
<<dialogue $playerAvatar "You" "Sorry to interrupt, I just wanted to say I’m a big fan of your work">>
<<dialogue "img/character/howard/howardavatar1.png" "Old man" "A fan, huh? That’s rare these days">>
<<dialogue $playerAvatar "You" "I was hoping I could talk to you for a bit in private, if possible">>
<<dialogue "img/character/howard/howardavatar1.png" "Old man" "Can’t right now. But if it’s important, you can come by later. Room 607">>
<<dialogue $playerAvatar "You" "Even better">>
@@.option-button;[[Leave|Hotel]]@@
<<set $now to setup.changeDate($now, 'minutes', 15)>>
<<set $HowardTalk1 = 0>>
<<set $HowardTalk2 = 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelsecondfloor.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to hotel room 607")>><img src="img/character/howard/howardhotel.png" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/character/howard/howardavatar1.png" "Old man" "So, what’s this really about?">>
<<dialogue $playerAvatar "You" "I’m going to be honest with you. I’m not actually a fan, I’m here for business">>
<<dialogue "img/character/howard/howardavatar1.png" "Howard" "Figures. The name’s Howard">>
You get straight to the point. You tell him about the take and how his voice-mimicking technique could help you get past a verification step. Just one phone call.
<<dialogue "img/character/howard/howardavatar1.png" "Howard" "Alright. How much are we talking?">>
<<dialogue $playerAvatar "You" "$200,000">>
<<dialogue "img/character/howard/howardavatar1.png" "Howard" "And who exactly are you robbing?">>
<<dialogue $playerAvatar "You" "That part I can’t tell you">>
<<dialogue "img/character/howard/howardavatar1.png" "Howard" "How am I supposed to mimic someone’s voice if I don’t even know who he is?">>
<<dialogue $playerAvatar "You" "I can send you a voice sample if you’re willing to help me">>
<<dialogue "img/character/howard/howardavatar1.png" "Howard" "I’m old. Not much excitement left at my age... I’ll help you. On one condition">>
<<dialogue $playerAvatar "You" "I'm listening">>
<<dialogue "img/character/howard/howardavatar1.png" "Howard" "I want 20%">>
<<dialogue $playerAvatar "You" "20% for a phone call?">>
<<dialogue "img/character/howard/howardavatar1.png" "Howard" "If you’re good at something, never sell yourself cheap">>
<<dialogue $playerAvatar "You" "Fine, 40G">>
<<dialogue "img/character/howard/howardavatar1.png" "Howard" "That’s more like it">>
<<dialogue $playerAvatar "You" "Here’s the voice sample. You’ve got about a week to mimic it. I’ll call you when it’s time. Be ready">>
<<dialogue "img/character/howard/howardavatar1.png" "Howard" "I’ll be ready">>
@@.option-button;[[Leave|Hotel]]@@
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<set $HowardTalk2 = 2>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1room.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.5) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<if $MarinaRescue == 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to Spade Mansion at night")>>
<<elseif $McMahonJailConfront == 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to BSD in the morning.\n McMahon will be released on: "+ formatGameDateTime($JackMcMahonReleaseTime))>>
<<elseif $BankHeist1 == 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Call Carrie to start the bank heist.\n McMahon will be released on: "+ formatGameDateTime($JackMcMahonReleaseTime))>>
<<elseif $MarinaCall3 == 1 and $PaolaTalk1 == 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "🔲Go to Hair Salon\n✅Go to the Hotel Lounge\n🔲Call Marina")>>
<<elseif $MarinaCall3 == 1 and $PaolaTalk1 == 0>>
<<run updateGuideTextForStoryline("Chapter I Guide", "✅Go to Hair Salon\n✅Go to the Hotel Lounge\n🔲Call Marina")>>
<<elseif $MarinaCall3 == 0 and $PaolaTalk1 == 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "🔲Go to Hair Salon\n✅Go to the Hotel Lounge\n✅Call Marina")>>
<<else>>
<<run updateGuideTextForStoryline("Chapter I Guide", "✅Go to Hair Salon\n✅Go to the Hotel Lounge\n✅Call Marina\n🎯Go to BSD. Time: "+ formatGameDateTime($MarinaAbuseProofTime))>>
<</if>><div class="location-banner">Jocelyn House</div>
<<setPassageVariableMap>>
<<nobr>>
<<if $Gareth1 == 1 and $Intelligence >= 5 and $energy >= 10>>
@@.option-button;<<link "Investigate">><<goto "JocelynHouseStalk">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $Gareth1 == 1>>
@@.option-button-disabled;Investigate • 🧠 Intelligence 5 • ⚡ Energy 10@@<</if>>
<<if $JocelynHouseInvestigate1 == 1 and $Intelligence >= 5 and $Endurance >= 5 and $energy >= 10>>
@@.option-button;<<link "Knock">><<goto "JocelynHouseInvestigate1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $JocelynHouseInvestigate1 == 1>>
@@.option-button-disabled;Knock • 🧠 Intelligence 5 •🛡️Endurance 5 •⚡ Energy 10@@<</if>>
<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/eastsideresident/eastsideresident.jpg][East Residential Area]]>><</button>>
<div class="location-name"><b>East Residential Area</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/jocelynhouse/jocelynhouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "About your parents... The divorce. How are you doing with all that?">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "It’s almost finalized. My dad’s leaving town once it’s done">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "What happens to you?">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "I’ll stay with my mom. I want to stay close to you">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Awe">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "I’ll stay with my mom. I want to stay close to you">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Does your dad have a problem with you staying here? With you not leaving with him?">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "He does, but… don’t tell anyone this, okay?">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "What?">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "The judge fuck him up just because he cheated. Gave my mom an extra ten grand in the settlement">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" ". . .">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "He told me if I get that money back for him, he won’t fight me staying here">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Gareth, that’s not okay">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "Who are you to judge?">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" ". . .">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "Drop it. Let’s talk about something else">>
From the darkness, you clenched your jaw, looking like little Haley isn't as naive as you thought. But what can you do for now?
@@.option-button;[[Leave|CarrieHouse]]@@
<<useItem "HaleyExam">>
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/carriehouse/carrielivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<if $Gareth1>>
<<run updateGuideTextForStoryline("Mary", "Investigate Gareth's house in east resident area (It called Jocelyn house)")>>
<<run updateGuideTextForStoryline("Haley", "Investigate Gareth's house in east resident area (It called Jocelyn house)")>>
<<set $Gareth1 = 1>>
<<else>>
<<run updateGuideTextForStoryline("Haley", "Continue with Mary guide")>>
<<run updateGuideTextForStoryline("Mary", "Meet Mary at the university")>>
<<set $Gareth1 = 2>>
<</if>>
<<run addContact("Carrie Kendrick", "img/character/carrie/carrieavatar.jpg", "555-5564", "", "CallingCarrie")>>
<<run setup.showNotification("Added Carrie to your contact")>>You start digging into Gareth’s life.
You watch his house for a couple of days, long enough to learn the rhythm. One morning, his mother, Jocelyn leaves early for work. Through careful observation and a bit of quiet pressure on the right people, you confirm what you suspected. She keeps the settlement money in a small safe hidden in her bedroom.
That same afternoon, Gareth makes his move.
You see him come home alone. He waits, pacing, then finally opens the safe. He takes the cash, and stuffs it into a gym bag. As an auteur in your own right, you can tell that Gareth is taking far more than his dad asked for. Like father, like son. Instead of leaving with it right away, he hides it deep in the back of his closet, behind old boxes and winter clothes.
But Gareth is not going to keep it there for long. You need time, long enough for Jocelyn to notice the money is missing and report it herself.
So you move first. When you reach Gareth’s room, you find the door locked. You do not hesitate. This is not your first time dealing with closed doors. You work quickly and quietly, just enough to get inside, leaving no visible damage behind. The closet is exactly where you expected it to be. A gym bag filled with stacks of $100 bills, far more than the ten grand you expected. You take the money with you.
You move down the hall and step into Jocelyn’s bedroom. Everything is neat, carefully kept. You open a drawer, take one of her panties.
Then you return to Gareth’s room.
You kneel and lift the edge of his bed, just enough to slide the panties underneath, pushing it far back where it will not be seen unless someone is looking for it..
You straighten the room exactly as you found it.
@@.option-button;[[Leave|JocelynHouse]]@@
<<run hideSidebar()>>
<<set $Gareth1 = 0>>
<<set $JocelynPoliceReport = 1>>
<<addItem "Jocelyn's Money Bag" "img/item/moneybag.png" "Jocelyn's Money Bag." "" "Trophy" 45000 1>>
<<set $tempdate to setup.changeDate($now, "days", 2)>><<set $JocelynPoliceReportTime to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 8, 0)>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $unlockedCharacters.jocelyn = true>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/jocelynhouse/jocelynlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Mary", "Continue with Jocelyn guide")>>
<<run updateGuideTextForStoryline("Haley", "Continue with Jocelyn guide")>>
<<run updateGuideTextForStoryline("Jocelyn", "Wait for Jocelyn to report the missing cash at BSD. Time: " + formatGameDateTime($JocelynPoliceReportTime))>>
<<run setup.showNotification("💋New Character Unlocked: Jocelyn!")>><img src="img/character/jocelyn/jocelyn1.png" width=50% style="display: block; margin: 0 auto;">
You notice Jocelyn the moment she steps through the door. Blue dyed hair falling past her shoulders, neatly dressed, late thirties. She is beautiful in a quiet, worn way, the kind that comes from trying to stay composed while something is clearly eating at her. Her eyes flick from desk to desk, uneasy, unsure who to talk to. You step forward, meet her eyes.
<<dialogue $playerAvatar "You" "Ma’am. I’m the sheriff. How can I help you?">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "I need to report a robbery, sheriff">>
<<dialogue $playerAvatar "You" "I see. Let’s talk inside my office">>
She nods quickly, grateful, and follows you down the hallway. Inside your office, the noise fades. You gesture for her to sit. She does, smoothing her skirt with trembling fingers.
@@.option-button;[[Go to your office|JocelynPoliceReport1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsdreception.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/jocelyn/jocelyn1.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name (Alias): Jocelyn Byers
Actress's name: Skye Blue
Age: 35
Height: 5'8" (172 cm)
Weight: 129 lbs (59 kg)
Build: 86-64-86 cm (34-25-34), slim and balanced, with a quiet elegance that doesn’t try to draw attention
Eye Color: Blue – cool, thoughtful, often distant
Hair: Brown, usually worn loose or tied back in a simple, no-nonsense style
Skin Tone: Fair, well-kept but marked by fatigue beneath the surface
Scars/Tattoos: Crescent moon on her right flank at bust level; red bear face tattoo on the top of her right buttock; ink on the palm of her right hand
Piercings: None listed
Background
Origin: Born and raised in Bason
Occupation: Teacher at Bason University
Reputation: Considered competent and serious by students, though many sense she keeps strict boundaries.
Family: Recently divorced; mother to Gareth
<<nobr>>
<table class="gallery-table">
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You bring her into your office, shut the door, and motion for her to sit. She looks exhausted, like she has not slept much since.
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "I didn’t want to do this right away, I kept hoping there was some other explanation">>
<<dialogue $playerAvatar "You" "Tell me exactly how you discovered it">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "Yesterday, after work, I came home and went to the safe. Nothing unusual. I just needed some cash to pay a couple of bills. When I opened it, my stomach just dropped">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "Most of the money was gone. Not a little. Almost all of it">>
<<dialogue $playerAvatar "You" "How much was lost?">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "$45,000. I counted it over and over, like maybe I was losing my mind. I went straight to Gareth, my son. I told him, ‘I think we’ve been robbed.’ He looked completely shocked. Just as confused as I was">>
<<dialogue $playerAvatar "You" "Really?">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "We turned the house upside down together. Every room, every drawer, under the beds, behind the furniture. I thought maybe I moved it and forgot. But it wasn’t anywhere. If someone breaks into our home and steals it, please get it back">>
<<dialogue $playerAvatar "You" "Alright, I’ll personally handle this case. I’ll come by your place later. We’ll take a closer look, go through everything properly. For now, you should head home and get some rest. There’s nothing more you need to do tonight">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "Thank you, Sheriff">>
She stands, gathering herself, and gives you a small, grateful smile before turning toward the door.
@@.option-button;[[Wait|JocelynPoliceReport2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Jocelyn's Money Bag</h2><img src="img/item/moneybag.png" width =100%>
<p><strong>Type:</strong> Trophy</p><p><strong>Full Description:</strong> Jocelyn’s money bag. All 45 grand. Sadly, you can’t spend any of it.</p>
Jocelyn answers the door almost immediately, like she has been waiting.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Hey, Joy">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "Selena… I’m really glad you’re here">>
<<dialogue $playerAvatar "You" "Sorry we couldn’t come right away">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "It’s fine. Please come in">>
@@.option-button;[[Get inside|JocelynHouseInvestigate1.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/jocelynhouse/jocelynhouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Not long after Jocelyn leaves the station, there is a knock on your office door. Selena steps in, closing it behind her.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Hey, I just saw a friend stop by your office. What’s going on?">>
<<dialogue $playerAvatar "You" "She’s here to report missing money. 45,000 dollars">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "What? Joy?">>
<<dialogue $playerAvatar "You" "Jocelyn, do you know her?">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Yeah, we were friends back in middle school... Shouldn’t we go help her? I mean, that’s a lot of money">>
<<dialogue $playerAvatar "You" "I’m going to stop by her place later">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "I’ll come with you. She’s my friend, after all">>
<<dialogue $playerAvatar "You" "Alright. I’ll let you know when I’m ready to go">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Great">>
@@.option-button;[[Work|SheriffOffice]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $JocelynPoliceReport = 0>>
<<set $JocelynHouseInvestigate1 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Jocelyn", "Go to Jocelyn house")>>Jocelyn answers the door almost immediately, like she has been waiting.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "You’ve got a lovely house, Joy. Are you sure you built this on a teacher’s salary? hehehe">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "You’re always unfiltered, Selena">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "I just want to lighten the mood, Joy. Don’t worry, we’ll get your money back">>
<<dialogue $playerAvatar "You" "We’ll take a look around, you can show us where everything was">>
She leads you inside, explaining again where the safe is, how nothing else seemed disturbed.
<<dialogue $playerAvatar "You" "Is your son home?">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "Yes, let me call him. Gareth!!! Can you come down here and help the sheriff?">>
Gareth comes down the stairs with a scowl already on his face.
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "So you really had to bring the cop, mom?">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "Don’t be rude, Gareth. They're here to help">>
<<dialogue $playerAvatar "You" "Selena, why don’t you take Jocelyn and check the basement and the storage room. I’ll go through the house with Gareth">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Sure. Come on, Joy">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "Okay, follow me. Do your best to help the sheriff, Gareth">>
@@.option-button;[[Check the house|JocelynHouseInvestigate1.2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/jocelynhouse/jocelynlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You start moving through the house, checking rooms one by one. Gareth trails behind you, arms crossed, clearly irritated. After the second room, he lets out an annoyed breath.
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "This is a waste of time, we’ve already searched the house">>
Before you can respond, he turns sharply and storms off down the hall. You hear his footsteps heading toward the basement stairs. This is exactly what you wanted.
The moment Gareth disappears down the stairs, you move. You slip out the front door, keeping your pace casual, and head straight to the car. The money bag is right where you left it. You grab it, feel the weight settle in your hand, then turn back toward the house.
Inside, you do not waste a second. You go straight upstairs, into Gareth’s room. You kneel, slide the bag back into the same spot behind the boxes and clothes, positioning it exactly as before.
You take one last look, lock the door, then leave the room.
By the time you head downstairs, your face is neutral again. You step into the livingroom just as Selena and Jocelyn are finishing their check..
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Nothing down here">>
<<dialogue $playerAvatar "You" "Same upstairs. There was one room that was locked. I believe it’s your son’s room, Jocelyn?">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "Yeah, he usually keeps his door locked">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Have you checked his room?">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "Well, yes... Gareth told me he checked his room himself">>
Gareth appears completely unbothered. You shoot Selena a suspicious look.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "We’ve already checked the entire house. One more room won’t hurt">>
@@.option-button;[[Check Gareth's room|JocelynHouseInvestigate1.3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/jocelynhouse/jocelynlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Reluctantly, Gareth unlocks the door. The four of you step inside. The room is messy in the way teenage rooms usually are. You move slowly, deliberately unfocused, opening a drawer here, lifting a notebook there.
Selena heads straight for the closet. She pushes aside a few jackets, shifts a box, and found a gym bag. She pulls it out from the back of the closet and sets it on the bed. She unzips it slowly.
<img src="img/item/moneybag.png" width=100%>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Joy… is this your money?">>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" ". . .">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "What? No. That’s impossible">>
Selena wastes no time. She kneels by the bed, quickly thumbing through the stacks with practiced speed.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "About $45,000, all in $100 bills">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "I didn’t do it! That’s not mine. I swear to God, that’s not mine">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Funny how stolen money just magically shows up in your closet, huh?">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "No! You’re trying to pin this on me!">>
Gareth lunges forward, panicked, hands flailing. He shoves Selena hard. She loses her footing and hits the floor.
@@.option-button;[[Pinch him down|JocelynHouseInvestigate1.4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/jocelynhouse/jocelynbedroom1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You move instantly. You grab Gareth, twist him around, and slam him face down onto the bed, then the floor, forcing his arms behind his back.
<<dialogue $playerAvatar "You" "Don’t move, kid. You just assaulted a deputy">>
On the floor, Selena groans, then pauses. Her eyes lock onto something under the bed. She reaches under, fingers brushing fabric, and pulls it out.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Hold on">>
A black underwear. She stares at it, confused, then looks up at Jocelyn.
<img src="img/item/jocelynpanties.png" width=100%>
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "That’s… mine">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "What? No!">>
Gareth appears completely unbothered. You shoot Selena a suspicious look.
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "You perv...">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "Please, Mom, you have to trust me. I messed up. I was only going to borrow some money. It was Dad’s idea—he told me to steal it. I swear, I don’t know anything about your underwear">>
Jocelyn looks at the dirty underwear in Selena’s hand, then at the money on the bed, then finally at Gareth pinned to the floor. Her shoulders sag.
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "That’s enough. I don’t want to hear it">>
You ease your grip just enough to let Gareth breathe, but you do not let him up. Jocelyn does not look at him again. Her voice is steady, but the disappointment in it cuts deeper than anger. She then turns to you and Selena.
<<dialogue "img/character/jocelyn/jocelynavatar.jpg" "Jocelyn" "Thank you for coming. I’ll handle this from here. You should go.">>
You help Selena to her feet, give Jocelyn a final look, and guide her out of the room.
@@.option-button;[[Leave|JocelynHouseInvestigate1.5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/jocelynhouse/jocelynbedroom1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>A few days later, it ends quietly.
You’re driving past Jocelyn’s place when you see a car pulled up in front of the house. Gareth’s father stands by the trunk, cigarette between his fingers, engine still running. He looks impatient, already halfway gone.
Gareth comes out last, dragging two suitcases with him. He pauses on the porch, glancing back at the front door as if waiting for it to open.
It doesn’t.
It seems Jocelyn is so disgusted she can’t even bring herself to see him off.
Gareth exhales, shoulders tightening, then walks down the steps. His father pops the trunk without a word. The suitcases go in. Gareth gets into the passenger seat.
The car pulls away from the curb, tires crunching softly against the gravel.
@@.option-button;[[Leave|JocelynHouse]]@@
<<run hideSidebar()>>
<<set $JocelynHouseInvestigate1 = 0>>
<<set $MaryConfession2 = 1>>
<<useItem "Jocelyn's Money Bag">>
<<nobr>><<for _i to 0; _i lt 1000; _i++>>
<<if $MaryConfessionTime2 gte $now>>
<<break>>
<</if>>
<<set $MaryConfessionTime2 to setup.changeDate($MaryConfessionTime2, 'weeks', 1)>>
<</for>><</nobr>>
<<set $now to setup.changeDate($now, 'hours', 3)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/jocelynhouse/jocelynbedroom1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Jocelyn", "You have reached the end of this update")>>
<<run updateGuideTextForStoryline("Haley", "Continue with Mary guide")>>
<<run updateGuideTextForStoryline("Mary", "Go to the church on sunday. Time: "+ formatGameDateTime($MaryConfessionTime2))>>You slip into the confessional just as the evening light fades through the stained-glass windows, turning the booths blood-red and gold. The church is empty, the air heavy with incense and old wood. You sit in the priest’s side, knees apart, hands resting easy on your thighs, waiting.
Five minutes later the door on the other side creaks open. Mary kneels. You hear the soft rustle of her dress, the click of rosary beads. She crosses herself, voice trembling with something between relief and awe.
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Bless me, Father. I don’t know how to say this right">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Gareth is gone from this town for good. I know it was you. You answered me">>
She pauses, waiting for the voice she heard last time. You let the silence stretch until it’s almost unbearable, then speak.
<<dialogue $playerAvatar "You" "I am always listening, Mary">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "But Father, even though Gareth's gone, Haley still stays with him. She calls it a 'long-distance relationship'—that stupid slut">>
<<dialogue $playerAvatar "You" "SILENCE!">>
The single word cuts her off. She falls silent instantly, trembling in fear.
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "I'm sorry, Father. I didn't mean to blaspheme in your presence. Please punish me, Father">>
<<dialogue $playerAvatar "You" "You vowed your chastity to me, and yet you dare to sin right in my presence. You will be punished">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Yes… yes, my Lord">>
@@.option-button;[[Stick your cock through the hole|MaryConfession8]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/brickup.webp" width=70% style="display: block; margin: 0 auto;">
Mary's gaze fixes on your cock emerging through the small opening, her mouth falling open in shocked disbelief. For a long moment, she simply stares, transfixed by the sight of the divine member pulsing with a life of its own. Her eyes flicker upward, seeking reassurance in the heavens, but find only the impassive stone ceiling.
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "No, God, please no, I have never done anything like this before">>
<<dialogue $playerAvatar "You" "Fear Not My Child. You love Haley, right?">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Yes, father">>
<<dialogue $playerAvatar "You" "Then this is the way">>
A single tear rolls down Mary cheek, leaving a glistening trail on her pale skin. With a deep, shuddering sigh, she parts her lips, the warm exhalation caressing the sensitive head of your manhood before she tentatively extends her tongue to taste the salty essence of your flesh.
@@.option-button;[[Enjoy|MaryConfession9]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/mary/maryblowjob1.webp" width=100%>
As Mary's lips envelop the swollen head of your cock, a moan of both fear and reluctant arousal escapes her. The musky scent of masculine desire fills her nostrils, making her head spin. Tentatively, she begins to suck, her tongue swirling around the ridges and veins as she tries to coax more of your cock into her eager mouth.
<<dialogue "img/character/mary/marysexavatar3.jpg" "Mary" "Hhlp… hhlp… guh-luuuk…">>
Muffled sounds of pleasure vibrate around the thick shaft as she works, saliva pooling on her chin and dripping onto her cleavage. She murmurs around the cockhead, her voice muffled and husky with lust. The confessional reeks of sex and holy incense, the air thick with the scent of her arousal.
<<dialogue "img/character/mary/marysexavatar3.jpg" "Mary" "Ggghhhk—! …mmph… ggghkkk...yes, Lord...please...">>
@@.option-button;[[Order Mary to suck faster|MaryConfession10]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/mary/maryblowjob2.webp" width=100%>
At your command, Mary doubles her efforts, sucking harder and faster, her head bobbing frantically along the length of your cock. The wet slurping noises escalate, mingling with her ragged breathing and the occasional whimper of delight.
<<dialogue "img/character/mary/marysexavatar3.jpg" "Mary" "Ulp… ulk… ulk… ulk… ">>
Her words garbled by the thick flesh filling her mouth. Her tongue swirls and laps at the sensitive underside, coaxing out beads of precum that she eagerly laps up. With one hand, she continues to stroke the base of the cock, while the other reaches up to fondle her own breast, tweaking the nipple through the fabric of her dress. A mixture of Mary's saliva and your pre-cum continue to drip to the floor.
<<dialogue "img/character/mary/marysexavatar3.jpg" "Mary" "slurp shluck—shluck—shluck… ">>
<<dialogue $playerAvatar "You" "It's time, my child. Don't you dare waste a drop">>
Mary's throat convulses as she tries to swallow as much of your thick cock as possible, the muscles rippling to milk it for every last spurt. As the first hot jets of your semen erupt into her mouth, Mary's eyes roll back in blissful surrender. She swallows reflexively, gulping down the thick, salty fluid as it floods her throat. The intense flavor of your essence courses through her, filling her both mentally and physically. When the final pulses subside, Mary releases the spent cock with a soft pop, her lips shiny with saliva and your cum.
<<dialogue $playerAvatar "You" "You did well, Mary, My dear Mary">>
<<dialogue "img/character/mary/marysexavatar3.jpg" "Mary" "Yes...Father...">>
You quietly sneak out of the confessional, leaving Mary behind, sitting on a lagoon of cum and saliva, still processing what just happened.
@@.option-button;[[Leave|MaryConfession11]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<if !$MarySexScene2>>
<<set $MarySexScene2 = 1>>
<<set $MaryConfession2 = 0>>
<<set $HaleyStalking1 = 1>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<run updateGuideTextForStoryline("Mary", "You have reached the end of this update")>>
<<run updateGuideTextForStoryline("Haley", "Go to Haley's house (Carrie's house) again")>>
<<goto "Church">>
<<elseif $MarySexScene2 == 1>>
<<goto "Mary Hint">>
<</if>><input type="text" id="cheatcode" maxlength="20" placeholder="Enter cheat code">
<<button "Run cheat code">>
<<set _enteredCheatcode to jQuery("#cheatcode").val()>>
<<if _enteredCheatcode === $cheatcodeNightclubCard>> <!-- Check if the password is correct -->
<<addItem "Nightclub Member Card" "img/item/nightclubmembercard.png" "Membership card to access the VIP area in the nightclub." "" "Card" 20000 1>>
<<goto $prevPassage>>
<<elseif _enteredCheatcode === $cheatcodeAddMoney>> <!-- Check if the password is correct -->
<<set $MCMoney += 1000>>
<<goto $prevPassage>>
<<elseif _enteredCheatcode === $cheatcodeAddMoral>>
<<set $moral += 5>>
<<goto $prevPassage>>
<<elseif _enteredCheatcode === $cheatcodeSubMoral>>
<<set $moral -= 5>>
<<goto $prevPassage>>
<<elseif _enteredCheatcode === $cheatcodeAddStrength1>>
<<set $Strength += 1>>
<<goto $prevPassage>>
<<elseif _enteredCheatcode === $cheatcodeAddEndurance1>>
<<set $Endurance += 1>>
<<goto $prevPassage>>
<<elseif _enteredCheatcode === $cheatcodeAddIntelligence1>>
<<set $Intelligence += 1>>
<<goto $prevPassage>>
<<elseif _enteredCheatcode === $cheatcodeAddCharisma1>>
<<set $Charisma += 1>>
<<goto $prevPassage>>
<<else>>
Cheat code doesn't exist.
<<goto $prevPassage>>
<</if>>
<</button>>
<<dialogue "img/avatar/dev_avatar.png" "Dev" "You can find cheat codes on my Patreon">><<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Sheriff. You keep coming back in pieces. If I didn’t know better, I’d think you were trying to test my skills">>
Instead of sending you on your way, she surprised you.
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Why don’t you stay a little longer? Have some tea. I want to run a couple of tests, make sure we’re not missing anything">>
@@.option-button;[[Drink tea|EvelynChat1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Touch yourself as you did in the dark of your bedroom when you whispered her name. Show Me how you sinned. Do not hide a single sound or movement">>
A soft, trembling exhale escapes her. Her hands hesitate in the air for only a moment before one slides slowly down her stomach, fingers brushing the soft curls between her legs. The other rises to her breast, cupping it gently, thumb grazing the already-hard nipple.
She starts slow circling her clit with two fingertips, the slick sound faint but unmistakable in the small wooden booth. Her breath hitches.
<img src="img/character/mary/marymasturbate1.webp" width=100% style="display: block; margin: 0 auto;">
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "Yes, Father">>
<<dialogue $playerAvatar "You" "Tell Me what you feel">>
<<dialogue "img/character/mary/maryavatar.jpg" "Mary" "I’m… I’m wet. So wet Father. It feels… good">>
<<dialogue $playerAvatar "You" "I said show Me your sin, not whisper it. Fuck yourself like you do when you’re alone and desperate. Don’t hold back">>
@@.option-button;[[Watch closer|MaryConfession4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/confessional.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Gabbie places her hand on your chest, then shoves you down onto the cushions. She climbs over you in a heartbeat, straddling your lap, thighs trembling with need.
Gabbie reaches down, fingers shaking as she frees your cock from your jeans. It springs up hard and ready. She lines you up with her dripping cunt and sinks down in one slow, relentless glide.
A low, guttural moan tears from her throat as you fill her completely. Her head falls back, long hair spilling down her spine, hips rolling instinctively to take you deeper.
<img src="img/character/gabbie/gabbiecowgirl1.webp" width=100%>
<<dialogue "img/character/gabbie/gabbiesexavatar5.jpg" "Gabbie" "Fuck. I’m sorry. I don’t know what I’m doing. I don’t know anything anymore">>
<<dialogue $playerAvatar "You" "Don’t worry about it">>
<<dialogue "img/character/gabbie/gabbiesexavatar1.jpg" "Gabbie" "Ahh… ahh… fuck—yes—">>
Wet, obscene sounds fill the room every time her ass meets your thighs. Her breasts bounce wildly with the rhythm, brushing your chest on every downstroke.
@@.option-button;[[Grab her hip|GabbieDrugSex3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gabbiehouse/gabbiehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.4) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You grip Gabbie’s hips hard, fingers digging into sweat-slick skin, and start thrusting up to meet her. Every time she slams down, you drive deeper, matching her frantic rhythm perfectly.
<img src="img/character/gabbie/gabbiesquirt1.webp" width=50% style="display: block; margin: 0 auto;">
<<dialogue "img/character/gabbie/gabbiesexavatar5.jpg" "Gabbie" "Mmm… Mmm… I’m—fuck—I’m gonna—">>
You angle your hips just right, grinding against that spot inside her on every stroke. Her walls flutter, then clamp down tight. She tries to keep riding, but you take over completely, pounding up into her relentlessly. Her thighs shake, nails scraping down your chest.
<<dialogue "img/character/gabbie/gabbiesexavatar2.jpg" "Gabbie" "Mmmph—">>
You piston up into her relentlessly, hitting that spot over and over. Her whole body goes rigid.
@@.option-button;[[Change position|GabbieDrugSex4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gabbiehouse/gabbiehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.4) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You flip Gabbie onto her back in one swift move, her body sinking into the sofa cushions with a soft thump. Legs still trembling from her orgasm, she spreads them wide without being told, foots digging into the edge of the sofa as you settle between her thighs. You drive back into her in a single, brutal thrust.
<img src="img/character/gabbie/gabbiesex1.webp" width=100%>
<<dialogue "img/character/gabbie/gabbiesexavatar3.jpg" "Gabbie" "Oh god, it's so deep—Fuck—">>
You don’t. You pin her hips down and start fucking her relentlessly, deep, punishing strokes that make the sofa creak and shift beneath you. Every slam of your hips drives the air from her lungs in ragged moans.
Her full breasts bounce wildly with the force of it, jiggling up and down in heavy, hypnotic waves. Nipples hard and flushed, they sway and slap softly against her chest on every thrust, the motion hypnotic, obscene. Sweat beads on her skin, making them glisten under the low light.
<<dialogue "img/character/gabbie/gabbiesexavatar4.jpg" "Gabbie" "Haaah… haaah… please... cum outside">>
@@.option-button;[[Cum on her belly|GabbieDrugSex5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gabbiehouse/gabbiehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.4) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You feel the heat surge up your spine, balls tightening as Gabbie’s soaked, spasming walls drag you right to the edge. With a rough growl you pull out at the last second, fisting your slick cock once, twice.
The thick rope of cum shoots hard across her belly, splattering hot and heavy just below her navel, striping up over her stomach toward her ribs. Pulse after pulse erupts from you.
<img src="img/character/gabbie/gabbiecum1.webp" width=100%>
<<dialogue "img/character/gabbie/gabbiesexavatar3.jpg" "Gabbie" ". . .">>
Gabbie gasps at the sudden heat, arching slightly as it lands on her. She slumps against the soaked sofa cushions, chest rising and falling in shallow, even breaths, skin still flushed and glistening with sweat and your release.
You catch your own breath for a moment, watching the rise and fall of her ribs, the way her thighs still tremble faintly even in unconsciousness.
Then you slide an arm under her knees and another behind her back, lifting her easily. She’s warm and pliant in your arms, head lolling against your shoulder, hair damp and tangled.You carry her through the quiet house, up the stairs, and into her bedroom, you lay her down gently on the cool sheets. Her body sinks into the mattress, legs falling open naturally, cum still streaked across her stomach and slowly drying on her skin.
@@.option-button;[[Leave|GabbieDrugSex6]]@@
<<if !$GabbieSexScene1>><<set $GabbieDrugSex1 = 1>><</if>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gabbiehouse/gabbiehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.4) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if !$GabbieSexScene1>>
<<set $GabbieSexScene1 = 1>>
<<set $BankInvestigation1 = 0>>
<<set $Gabbie2 = 0>>
<<set $PaolaTalk1 = 1>>
<<set $HowardTalk1 = 1>>
<<set $HowardTalk2 = 1>>
<<set $MarinaCall3 = 1>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<run updateGuideTextForStoryline("Gabbie", "You have reached the end of this update")>>
<<run updateGuideTextForStoryline("Chapter I Guide", "🔲Go to Hair Salon\n🔲Go to the Hotel Lounge\n🔲Call Marina")>>
<<run setup.showNotification("💋New Character Unlocked: Paola!")>>
<<run updateGuideTextForStoryline("Paola", "Go to Hair Salon")>>
<<goto "Bank">>
<<elseif $GabbieSexScene1 == 1>>
<<goto "Gabbie Hint">>
<</if>>Mary said that Haley is still maintaining a long-distance relationship with Gareth, despite him leaving town. So you decided to sneak outside her window one day. You’re crouched in the shadows of the old tree outside her bedroom window. The curtain is half-drawn, a slice of warm yellow spilling out onto the siding.
Inside, Haley sits cross-legged on her bed in an oversized T-shirt, phone propped against a pillow
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "Miss me yet, babe?">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "I miss you, it’s weird here without you">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "Yeah. Same. It’s just temporary, okay? ">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Okay">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "Show me how much you miss me">>
Haley hesitates, glancing toward the window. You sink deeper into shadow, unmoving.
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "Come on. Take the shirt off">>
She exhales, fingers curling around the hem. Slowly, she pulls it over her head, lets it drop to the floor. No bra. Her skin is pale in the lamplight, nipples already tight from the cool air or the anticipation.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "You happy now?">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "That’s my girl. Grab your toy, babe. I wanna watch you fuck yourself with it">>
<img src="img/character/haley/haleymasturbate1.webp" width=100%>
Haley bites her lip, hesitates only a second, then reaches for the nightstand drawer. The toy slides out smooth and heavy in her hand. She starts thrusting the toy in and out, slow at first, then faster, matching the slap of Gareth’s fist on his cock. Her thighs tremble. Her toes curl into the sheets. The buzz and the slick sounds mix with their shared breathing, heavy and urgent.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "ahh...ahh">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "Fuck, Haley… Bring the phone closer. I want to see the whole thing">>
@@.option-button;[[Continue|HaleyStalking2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/carriehouse/haleyroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/haley/haleymasturbate2.webp" width=100%>
Haley’s hips roll slow and deliberate, the sex toy buried deep, the buzz a steady thrum against her clit. She’s breathing hard, eyes locked on the phone screen where Gareth’s fist is flying, his face twisted in that tell-tale grimace.
Less than two minutes in, Gareth's rhythm stutters. A choked groan rips out of him, hips bucking off the bed as he comes hard, thick stripes painting his stomach and chest. His hand slows to a lazy stop, cock twitching in his grip, spent. Haley freezes. The toy is still moving inside her, but her hand has gone slack.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Seriously? You came already?">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "Fuck, babe… you just looked so good. Couldn’t hold it">>
Haley stares at him, cheeks flushed from effort and frustration. The buzz of the toy suddenly feels loud, embarrassing. She pulls it free with a wet sound and clicks it off.
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Hey, want to hear what happened at school today? ">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "No, I’m done">>
<<dialogue "img/character/haley/haleyavatar.jpg" "Haley" "Babe—">>
<<dialogue "img/character/gareth/garethavatar.png" "Gareth" "I’m tired, Haley. Long day">>
Gareth ends the call before she can answer. The screen goes dark. Haley tosses the phone onto the nightstand then leave the room.
@@.option-button;[[Leave|HaleyStalking3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/carriehouse/haleyroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<if !$HaleySexScene1>>
<<set $HaleySexScene1 = 1>>
<<set $now to setup.changeDate($now, 'minutes', 15)>>
<<set $HaleyStalking1 = 0>>
<<run updateGuideTextForStoryline("Haley", "You have reached the end of this update")>>
<<goto "CarrieHouse">>
<<elseif $HaleySexScene1 == 1>>
<<goto "Haley Hint">>
<</if>>
<div class="location-banner">Sex Shop</div>
<<setPassageVariableNoMap>>
<div class="sex-shop-inventory">
<<for _itemName, _itemData range $SexShopItems>>
<div class="sex-shop-item">
<div class="item-image-container">
<<capture _itemName, _itemData>>
<<link [img[_itemData.image]]>>
<<if $MCMoney >= _itemData.price>>
<<set $MCMoney -= _itemData.price>>
<<addItem _itemName _itemData.image _itemData.description _itemData.details _itemData.type _itemData.price _itemData.quantity>>
<<run UI.alert("Purchased: " + _itemName + " for $" + _itemData.price)>>
<<else>>
<<run UI.alert("Not enough money! You need $" + _itemData.price)>>
<</if>>
<</link>>
<</capture>>
</div>
<div class="item-info">
<h3>_itemName</h3>
<p class="item-description">_itemData.description</p>
<p class="item-price">Price: $<<print _itemData.price>></p>
</div>
</div>
<</for>>
</div>
@@.option-button;[[Leave|SexShopInside]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/sexshop1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Sex Shop</div>
<img src="img/character/tara/tara1.jpg" width=100%>
<<setPassageVariableNoMap>>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "What’ve you got for me?">>
<<nobr>><<if setup.isOpeningHours($now)>>
<<if $TaraMushroom1 == 1 && $inventory["Red Mushroom"] && $inventory["Red Mushroom"].quantity >= 5>>
@@.option-button;[[Give Tara the mushroom|TaraTalk2]]@@
<</if>>
<<if $MakingPotion == 1>>@@.option-button;[[Making Potion|PotionCauldron]]@@<</if>>
<<else>>
<<goto "Sex Shop">>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/sexshop/sexshop3.png][SexShopInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/potionmakingcorner.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Doctor Evelyn is already at the desk, flipping through charts, her white coat unbuttoned just enough to show the curve of her scrubs. She looks up, spots you, and her professional smile cracks just a fraction wider.
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Sheriff. Right on time. Follow me">>
<<dialogue $playerAvatar "You" "What's the problem?">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "I need to talk to you about the sample I took during your last checkup. Please have a seat">>
<<dialogue $playerAvatar "You" "Okay">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "So, the results from your seminal fluid analysis...">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "You have triple the average sperm count for a healthy male. We're talking 45 million per milliliter. Most men hover around 15. Motility's off the charts—over 90% forward progressive">>
<<dialogue $playerAvatar "You" "What does that mean, Doctor?">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "It means you're... exceptional. Here's where it gets interesting. Your sperm have... evolved, for lack of a better word. They're producing massive amounts of a compound, Phalloplasma—it's a hyper-concentrated mix of pheromones, endorphin triggers, and natural aphrodisiacs. In layman's terms? Your cum could make a nun rethink her vows. It ramps up female arousal on contact—skin, mucous membranes, you name it. Heart rate spikes, blood flow to erogenous zones triples, sensitivity goes nuclear. I've never seen anything like it">>
<<dialogue $playerAvatar "You" "Will this affect my health in any way?">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "For now, I can’t be certain of anything. I suspect it's from prolonged sexual inactivity. Years, maybe more. Your body's overcompensating, building up this arsenal. Like a dormant volcano ready to blow">>
<<dialogue $playerAvatar "You" "That a problem?">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "I’m not sure yet. The data is… unprecedented. I can’t draw definitive conclusions from one sample. I need to run comparative tests...Long story short, I need to collect more samples from you">>
<<dialogue $playerAvatar "You" "Ohh">>
@@.option-button;[[Let her collect your sample|DoctorVisit1.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Evelyn steps closer, the faint scent of her perfume mixing with the sterile air. Her fingers find your belt. The buckle clinks open. The zipper rasps down slow, deliberate. She eases your jeans and briefs down just enough, and your cock spills free, resting against your thigh like it belongs there.
She sinks to her knees in front of the exam table. One gloved hand cups your balls gently while the other wraps around the base. She leans in and drags her tongue up the underside in one long, slow lick from root to tip, tasting you with curiosity that quickly turns.
<img src="img/character/evelyn/evelynblowjob1.webp" width=100%>
<<dialogue "img/character/evelyn/evelynsexavatar2.jpg" "Evelyn" "Sample needs to be... as fresh as... possible">>
<<dialogue $playerAvatar "You" "Take your time">>
@@.option-button;[[Get hard|DoctorVisit1.2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>When you’re rock-hard and straining, she pulls back just long enough to meet your eyes. She locks her lips around your shaft and starts sucking with fierce, clinical intensity.
<img src="img/character/evelyn/evelynblowjob2.webp" width=100%>
<<dialogue "img/character/evelyn/evelynsexavatar3.jpg" "Evelyn" "gluk—gluk—gluk—">>
She bobs her head fast and deep, taking you to the back of her throat on every stroke. Her cheeks hollow as she applies hard suction, tongue pressing flat against the underside, flicking rapidly along the thick vein each time she pulls back.
Saliva spills from the corners of her stretched lips, dripping in shiny strands down your length and over her gloved fingers still wrapped around the base. She twists her hand in tight, slick strokes to match the rhythm of her mouth, milking you with practiced precision.
<<dialogue "img/character/evelyn/evelynsexavatar1.jpg" "Evelyn" "Mmmph...mmph...hhlk...">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/evelyn/evelynsexavatar2.jpg" "Evelyn" "Glurp… glurp… gluuuuurghp…">>
Finally, she pulls off with a loud, obscene pop, your cock slipping free from her swollen lips. A thick rope of saliva bridges from her mouth to the flushed head before breaking, dripping down her chin in a glistening trail. She gasps for air, chest heaving, strands of spit still connecting her lips to you as she leans back on her heels.
<<dialogue "img/character/evelyn/evelynsexavatar3.jpg" "Evelyn" "Jesus, you’re a hard swallow, Sheriff. Most men would’ve come twice by now">>
@@.option-button;[[Tease her|DoctorVisit1.3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Really? Or is it because you didn’t try hard enough?">>
Her eyes flash. A slow, dangerous smile curves her messy lips.
<<dialogue "img/character/evelyn/evelynsexavatar2.jpg" "Evelyn" "Is that so? Then let’s correct that variable">>
She attacks your cock with renewed ferocity. No slow build this time—she swallows you straight to the root in one brutal push, throat convulsing around you as she forces past her gag reflex. Her nose grinds against your pelvis, eyes squeezing shut behind fogged lenses while she holds it, humming low and deliberate so the vibration shoots straight through you.
<img src="img/character/evelyn/evelynblowjob3.webp" width=100%>
<<dialogue "img/character/evelyn/evelynsexavatar1.jpg" "Evelyn" "gluk—gluk—GLUK—!">>
She twists both hands around the base now, stroking in tight, slick pulls opposite her mouth’s rhythm, milking you with clinical precision turned feral. Every few strokes she pulls back just enough to gasp, spit bubbling at her lips, then slams down again—deeper, harder, determined to break you.
<<dialogue "img/character/evelyn/evelynsexavatar3.jpg" "Evelyn" "GGGHHHLLK—!">>
The pressure builds too fast to fight. Your hips jerk forward involuntarily, breath ragged.
@@.option-button;[[Cum|DoctorVisit1.4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Doc—I’m there, I’m gonna come—">>
She hears you and doubles down. Her lips clamp tighter around your cock; she forces her head down one last brutal inch until her nose is buried against you and your cock is lodged deep in her throat. She locks there, throat fluttering around the head as she hums a low, greedy sound of encouragement.
<<dialogue "img/character/evelyn/evelynsexavatar2.jpg" "Evelyn" "Shhlrrrp—shhlrrrp— ">>
The first thick pulse erupts straight down her throat. She swallows hard, once, twice, gulping greedily around you. Load after heavy load floods her mouth, hot, endless ropes that fill her cheeks faster than she can swallow. Her eyes water, but she doesn’t flinch, determined to take every drop. But there’s too much.
Cum starts to spill from the corners of her stretched lips, thick white trails slipping down her chin. Without missing a beat she reaches blindly to the side table, grabs a clear plastic specimen container, and holds it just below her jaw.The overflow drips in heavy strands into the container, creamy white against the sterile plastic. She keeps sucking gently through your aftershocks, milking the last spurts with her tongue until you’re completely spent.
<img src="img/character/evelyn/evelynblowjob4.webp" width=100%>
<<dialogue "img/character/evelyn/evelynsexavatar1.jpg" "Evelyn" "HAAHH—ahhh… haaah… ">>
Only then does she slowly pull off, lips shiny and swollen, a final strand of cum connecting her mouth to your softening cock before it breaks and falls into the container. She caps it carefully, sets it on the tray with a soft click, then looks up at you.
<<dialogue "img/character/evelyn/evelynsexavatar7.jpg" "Evelyn" "That was… A lot. More than I expected. Not only do I have direct exposure data from fresh seminal fluid—">>
Evelyn sits back on her heels, breathing hard, cheeks flushed deep red, lips swollen and glistening. Cum still clings to her chin, a stray drop sliding down her throat and disappearing beneath her collar. The container in her hand is nearly full.
<<dialogue "img/character/evelyn/evelynsexavatar7.jpg" "Evelyn" "—but I’ve got a full container for later lab analysis.">>
<<dialogue $playerAvatar "You" "You're welcome">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "You should go, I need to document every physiological change, heart rate, temperature, arousal markers, cognitive effects… I—I’m already feeling them. Quite strongly">>
<<dialogue $playerAvatar "You" "I’ll leave you to it, then, doc">>
@@.option-button;[[Leave|DoctorVisit1.5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<if !$EvelynSexScene2>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $EvelynTalk2 = 0>>
<<set $EvelynTalk3 = 1>>
<<set $EvelynSexScene2 = 1>>
<<set $tempdate to setup.changeDate($now, "days", 7)>><<set $EvelynTalk3Time to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 14, 0)>>
<<run updateGuideTextForStoryline("Evelyn", "Go to the hospital. Time: "+ formatGameDateTime($EvelynTalk3Time))>>
<<goto "Hospital">>
<<elseif $EvelynSexScene2 == 1>>
<<goto "Evelyn Hint">>
<</if>>
<img src="img/character/evelyn/evelynhandjob.webp" width=100%>
<<dialogue $playerAvatar "You" "I'm almost there, doc">>
Evelyn's grip tightens, her strokes becoming rapid and urgent. She guides your twitching cock towards the waiting collection cup, positioning it perfectly to catch your release.
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "That's it, let it all out!">>
Evelyn expertly milks every drop from your spasming member, the cup soon overflowing with your potent cum. She holds it steady, allowing not a single precious spurt to escape.
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Excellent work, sheriff. Now, let's me run some test with it. You can go now">>
You head for the door.
@@.option-button;[[Leave|EvelynHandjob2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/doctoroffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<nobr>><<set $FrannyPeeingChance = Math.floor(Math.random() * 100)>>
<<if $FrannyPeeingChance <= 50>>
<img src="img/character/franny/frannypeeing1.webp" width=100%>
<<else>>
<img src="img/character/franny/frannypeeing2.webp" width=100%>
<</if>><</nobr>>
You lead Franny down the dirt trail just behind the bar, Franny squats down right there, knees apart, and starts peeing as if she’s been holding it in for days.
<<dialogue $playerAvatar "You" "Good girl">>
<<dialogue "img/character/franny/frannyavatar.jpg" "Franny" ". . .">>
@@.option-button;[[Leave|FrannyAtWineStorage]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/franny/frannykissing1.webp" width=100%>
You lean in and kiss Franny. It starts soft, just a warm press of your lips against hers, lingering long enough for her to feel the affection in it. Her lips part on a tiny, silent inhale, and you deepen the kiss, slow but deliberate.
Franny melts immediately. Her small hand slides up to rest against your jaw, fingers trembling just a little as she kisses you back with quiet intensity. She doesn’t make a sound, but her body says everything.
@@.option-button;[[Leave|FrannyAtWineStorage]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<nobr>><<set $FrannyDildoPlayChance = Math.floor(Math.random() * 100)>>
<<if $FrannyDildoPlayChance <= 50>>
<img src="img/character/franny/frannydildoplay1.webp" width=100%>
<<else>>
<img src="img/character/franny/frannydildoplay2.webp" width=100%>
<</if>><</nobr>>
Between Franny's thighs rests the smooth silicone dildo you give her. She presses the rounded head against her entrance again, slow, deliberate thrusts at first. then easing it inside, deeper each time. Her walls cling to the silicone; you can see the faint shine of wetness on the shaft every time it emerges.
@@.option-button;[[Leave|FrannyAtWineStorage]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<nobr>><<set $FrannyVibratingPantiesChance = Math.floor(Math.random() * 100)>>
<<if $FrannyVibratingPantiesChance < 25>>
<img src="img/character/franny/frannyvibratingpanties1.webp" width=100%>
<<elseif $FrannyVibratingPantiesChance > 75>>
<img src="img/character/franny/frannyvibratingpanties2.webp" width=100%>
<<elseif $FrannyVibratingPantiesChance >= 25 and $FrannyVibratingPantiesChance <= 50>>
<img src="img/character/franny/frannyvibratingpanties3.webp" width=100%>
<<elseif $FrannyVibratingPantiesChance > 50 and $FrannyVibratingPantiesChance <= 75>>
<img src="img/character/franny/frannyvibratingpanties4.webp" width=100%>
<</if>><</nobr>>
As expected, Franny is wearing the panties. You reach quietly for the remote in your pocket and thumb the lowest button.
A soft, steady vibration starts between her legs. Franny stirs immediately. Her eyes flutter open, confused for a split second, then widening as she registers the gentle buzz pressing right against her clit. Her hips give a small, involuntary twitch. Her hand drifts down, fingers brushing the waistband of the panties as if to confirm it’s real.
After a minute, you click it up one notch.
The vibration strengthens. Franny’s whole body tenses. A silent gasp parts her lips; her back arches just a fraction off the bed. Both hands now grip the sheets at her sides, knuckles pale. Her thighs clamp together, then part again, restless. The faint outline of the bullet shows through the cotton as she grinds against it helplessly.
You wait, letting the pleasure build then one more click
Franny’s reaction is immediate. Her legs spread wider, knees falling open as her hips lift clear off the mattress. Her small breasts quiver with each sharp inhale. One hand flies between her legs, pressing the fabric harder against herself, while the other clutches the pillow beside her head.
Franny goes rigid. Her body shakes with strong, rhythmic pulses, thighs trembling, toes curling tight. The orgasm hits suddenly and hard
@@.option-button;[[Wait more|FrannyVibratingPantiesPlay]]@@
@@.option-button;[[Leave|FrannyAtWineStorage]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The bell above the door lets out a tired little jingle as you step inside the Sex Shop. Neon lights hum softly, washing the place in pinks and purples that feel more tired than seductive. Shelves line the walls, packed tight, unapologetic. The air smells faintly of plastic and cheap incense.
Behind the counter, leaning on her elbows and scrolling her phone, is the clerk. Early thirties, maybe thirty exactly. Long blonde hair with a streak of red.
<img src="img/character/tara/tara1.jpg" width=100%>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Welcome to the den of sin, handsome. Name’s Tara. I run this circus. You lost, or you here to buy something that’ll make your dick happy?">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "So what’s it gonna be, big guy? Cock ring? Fleshlight? Extra-large anal plug for that special someone?">>
<<dialogue $playerAvatar "You" "Just looking around">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Yeah, figured. Half the guys who walk in here say that, then creep around for twenty minutes jerking off in the DVD booth. Shop’s dead today anyway. Fucking Christmas rush killed us—everybody’s buying gift cards for their side pieces online. Whatever">>
<<dialogue $playerAvatar "You" "Why don’t you give me a tour, then?">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Fine, Captain Hard-on. You want the grand fucking tour? Let’s go. Try not to cream your jeans before we hit the back room">>
<<dialogue $playerAvatar "You" "Let's go">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Standard vanilla shit over here. Dildos in every color of the rainbow—silicone, glass, steel if you’re into temperature play. Sizes from ‘cute beginner’ to ‘horse cock for the clinically insane.’">>
She picks up a thick veined realistic one, slaps it against her palm with a meaty thwack.
<img src="img/item/dildo1.png" width =100%>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "This bad boy’s a bestseller. Girls love the veins, guys love pretending it’s theirs">>
<<dialogue $playerAvatar "You" "Let's go">>
@@.option-button;[[Continue|TaraFirstMeet1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/sexshop3.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Next case: rows of fleshlights lined up like trophies, mouths and asses molded from porn stars you half-recognize.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Pocket pussies. These ones feel scarily real—new superskin formula. Warm ’em up in hot water and you’ll forget you’re not balls-deep in actual cunt. Not that you’d know the difference, I’m guessing">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "You know, if you are financially independent, you can forget these Fleshlights and all the other pocket toys">>
<<dialogue $playerAvatar "You" "You got something better?">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "I’ve got something way the fuck better. New-gen dolls, flown in straight from China last month. Top-of-the-line shit. TPE skin so realistic you’ll get goosebumps, full articulated skeletons, heating elements that warm them to body temp, removable orifices you can swap out like Lego pieces">>
<<dialogue $playerAvatar "You" "I’ll keep that in mind. What about the DVD?">>
@@.option-button;[[Continue|TaraFirstMeet2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/sexshop1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Tara lets out a short, barking laugh and flicks the curtain aside with two fingers. She leads you into the narrow aisle, the air cooler back here, thick with the faint plastic smell of shrink-wrap and dust.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Yeah, of course. Porn’s the fuel that keeps this place running, even if half the planet streams it for free now. Old-school pervs and collectors still drop cash on physical discs. Come on">>
<<dialogue $playerAvatar "You" "What do you have?">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Got everything. Straight vanilla—missionary, blowjobs, creampies. Lesbian—real and fake, softcore girl-on-girl for the curious housewives, hardcore strap-on gangbangs for the ones who ain’t curious anymore. Gay, bi, trans, orgies, gangbangs, interracial, MILF, barely legal">>
She pulls a few cases off the shelf, slapping them against her palm as she lists.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "BDSM section’s huge—bondage, spanking, wax play, femdom pegging, male sub stuff that’s blowing up lately. Fetish row over there: feet, latex, leather, piss, preggo, lactation if you’re into that weird shit. Got a whole rack of hentai and 3D animated—tentacles, monsters, schoolgirls getting railed by demons. And the extreme corner for the real sick fucks—fisting, prolapse, scat...">>
<<dialogue $playerAvatar "You" "Not for me then hahaha">>
She shoves the cases back, turns to you with that crooked, vulgar grin.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Here’s the thing—Ever heard of Sextok? Yeah, I figured a filthy little perv like you would have it right there on your phone. This is where things are going… I’m converting the shop into my personal porn studio">>
Tara leans in closer, lowering her voice even though the shop’s empty, eyes glinting like she’s offering you a deal on something illegal.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "If you ever convince your girl—wife, girlfriend, side piece, whatever—to film some real shit with you, no bullshit acting, just good hard fucking… bring it to me. I'll upload it on my account, we'll split the profit. Exclusive rights, I’ll handle editing, distribution, all that. You just gotta deliver the goods">>
You glance past the register and spot a small, curtained-off nook behind the counter—dimly lit, shelves lined with glass vials, mortar and pestle, a hot plate, bunches of dried herbs hanging from hooks. It looks less like retail and more like an old-school apothecary had a one-night stand with a chemistry lab.
<<dialogue $playerAvatar "You" "I’ll see what I can do. What’s the vintage section back there?">>
@@.option-button;[[Continue|TaraFirstMeet3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/sexshop1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Tara’s whole posture shifts. The cocky smirk falters for half a second, replaced by something wary. She glances at the front door like she’s checking for witnesses, then blows out a breath.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Fuck. You’ve got sharp eyes. It’s not for sale. Not yet, anyway. Personal project">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Fine. Place is empty, and you’re already back here being nosy. Come on">>
She lifts the counter flap and jerks her head for you to follow. You step behind the register into the small alcove. The air smells different here—herbs, alcohol, something sweet and earthy. Tara leans against the bench, arms crossed, defensive but proud.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "I’m brewing pleasure potions, aphrodisiac. Real ones. Not that sugary bullshit they sell as ‘aphrodisiac lube’ up front. These are concentrated tinctures, sublingual drops, topical oils—custom blends meant to crank sensitivity, blood flow, dopamine, oxytocin, all that good shit, without turning you into a zombie or giving you a heart attack">>
<<dialogue $playerAvatar "You" "Interesting">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "It's still in the research stage. I mean, fuck, I'm no Big Pharma lab rat with a million-dollar budget. This is me in my spare time, mixing shit after hours while the shop's closed">>
She picks up a small, unlabeled vial of shimmering purple liquid, holding it between thumb and forefinger like it's a grenade.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "But yeah, I've managed a prototype aphrodisiac. Hits harder than anything on the shelves—boosts sexual desire by about 50% over the market crap. We're talking instant fire in the veins, sensitivity dialed to eleven, libido like you're eighteen again and invincible">>
<<dialogue $playerAvatar "You" "You are selling it?">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Not yet. Problem is, the effect's short-lived—2, 3 hours tops. Then the crash hits like a truck. User ends up bedridden for a week: migraines, muscle aches, total exhaustion, hangover. Dehydration's a bitch, too. I've tested it on myself twice—once was enough to learn my lesson, second time was just to confirm the data. Woke up feeling like I'd been hit by a goddamn freight train">>
<<dialogue $playerAvatar "You" "That's a shame">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "It's got a long way to go. Need to stabilize the compounds, extend the duration without the hangover from hell. Maybe add some adaptogens to smooth the comedown. But when I crack it? This'll be the golden ticket. Sell it under the counter to the right crowd, and I'll be out of this shithole shop in a year">>
<<dialogue $playerAvatar "You" "I’ll be very happy to buy it when it’s ready">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Yeah, well, join the waiting list, cowboy. You and every horny bastard in a fifty-mile radius. Speaking of… who the hell are you, anyway?">>
@@.option-button;[[Tell her you’re the sheriff|TaraFirstMeet4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/potionmakingcorner.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue $playerAvatar "You" "Just the sheriff">>
The word lands like a brick through glass. Tara freezes. The smirk dies on her lips. Her face cycles through shock, realization, and pure panic in about two seconds flat.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Sh-sheriff? Like… the sheriff? the new guy? Oh shit, oh fuck—everything I said out there, the dolls, the homemade porn pitch, the potions—that was all jokes! Total bullshit! Role-play for the customers, you know? Keeps ’em coming back—ha, no pun intended">>
<<dialogue $playerAvatar "You" "Relax, Tara. I’m not here to raid the place. I’m off-duty">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "What do you want from me?">>
<<dialogue $playerAvatar "You" "I won’t report you. I want to be your first customer. I’ll buy your potion at full price if it’s as effective as you advertised">>
@@.option-button;[[Suggest that she drink it|TaraFirstMeet5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/potionmakingcorner.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Silicone Dildo</h2><img src="img/item/dildo1.png" width =100%>
<p><strong>Type:</strong> Gift</p><p><strong>Full Description:</strong> A Silicone Dildo</p><h2>Vibrating Panties</h2><img src="img/item/vibratingpanties.png" width =100%>
<p><strong>Type:</strong> Gift</p><p><strong>Full Description:</strong> A Remote Control Vibrating Panties</p><<dialogue "img/character/tara/taraavatar.jpg" "Tara" "You serious? I just told you it’ll fuck you up for a week">>
<<dialogue $playerAvatar "You" "Drink it. Let me see what it does">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Fine, Sheriff. You want a live demo? You got it">>
She strides to the front door, flips the sign to CLOSED, and twists the deadbolt with a loud click. The blinds rattle as she yanks the cord, shutting out the gray December light. Then she’s back in the alcove, grabbing the vial.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Rules, you watch, you don’t touch unless I say so">>
<<dialogue $playerAvatar "You" "Deal">>
Tara uncorks the vial. The liquid inside shimmers, thick and clear, smelling faintly of honey and something sharp, herbal, electric. She swirls it once, gives you a last defiant smirk, then tilts her head back and downs the whole thing in one smooth swallow.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Fuck, that’s rough">>
Thirty seconds in, her smirk falters. She blinks hard, sways a little, one hand gripping the counter. Color floods her cheeks.
<<dialogue $playerAvatar "You" "How do you feel?">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Fuck… head’s all fuzzy…">>
Tara's shaking her head like she can clear it. Her nipples are already poking through the thin fabric of her costume; her thighs press together under the short skirt. Another few seconds and her breathing turns shallow, ragged. Tara pushes off the counter, stumbles a step toward you. Her usual bravado is cracking fast.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Fuck, I need—I need you to fuck me. Right now. Don’t make me beg, asshole, just do it">>
@@.option-button;[[Fuck her|TaraFirstMeet6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/potionmakingcorner.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You settle between Tara’s spread thighs, the old couch creaking under your weight. Her boots are still on, fishnets torn wide, skirt bunched around her waist like a belt. She’s already dripping from the aphrodisiac, slick thighs trembling as you pin her wrists above her head with one hand. Her pierced nipples graze your chest when you lean in close.
<img src="img/character/tara/taramissionary1.webp" width=100%>
You line up and plunge in—one single, brutal stroke that buries you to the hilt inside her tight, scorching heat.
Tara’s eyes roll back instantly. Her whole body seizes, back bowing off the couch as a raw, shocked scream rips out of her.
<<dialogue "img/character/tara/tarasexavatar1.jpg" "Tara" "FUCK—OH FUCK—I’M CUMMING!">>
Her pussy clamps down hard, spasming violently around your cock from that very first thrust. She comes immediately, hips jerking helplessly, walls fluttering and squeezing in frantic waves. Hot wetness floods around you, soaking your shaft and dripping down to the leather beneath her ass. You don’t give her a second to recover.
<<dialogue "img/character/tara/tarasexavatar2.jpg" "Tara" "Mmm, mmm, nngh! Shit! shit! too much—fuck. Don’t stop">>
You start moving rapidly, hard, fast strokes that slam into her over and over, hips snapping with punishing speed. Each thrust punches the air from her lungs in sharp, filthy curses.
Her legs lock around your waist, heels digging into your back, urging you deeper even as her body shakes from the overstimulation. Her big breasts bounce with every brutal impact, piercings glinting in the low light. Nails scrape down your arms where she fights against your grip on her wrists.
You pound her relentlessly, cock dragging against every sensitive spot inside her until she’s babbling—half curses, half pleas.
<<dialogue "img/character/tara/tarasexavatar3.jpg" "Tara" "Goddamn it! I'm gonna come again—harder, you asshole">>
@@.option-button;[[Fuck her harder|TaraFirstMeet7]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/potionmakingcorner.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/tara/taramissionary2.webp" width=100%>
You grip Tara’s wrists tighter, pinning them above her head with one hand while the other digs into her hip, yanking her into every thrust. You pull almost all the way out and slam back in, hips crashing against hers with a wet, punishing slap that echoes through the back room.
<<dialogue "img/character/tara/tarasexavatar4.jpg" "Tara" "Unh, unh, unh, ohhh fuck!">>
You pound into her relentlessly, cock dragging against her front wall on every savage thrust, grinding her clit when your pelvis slams home. The couch groans under you both, sliding an inch across the floor with the sheer force.
<<dialogue "img/character/tara/tarasexavatar5.jpg" "Tara" "Fuckfuckfuck! Coming, coming">>
Her second orgasm crashes through her fast, pussy clenching even tighter, another rush of wetness coating your thighs. She thrashes under you, head thrashing side to side, red hair sticking to her sweaty face.
<<dialogue $playerAvatar "You" "Fuck, Tara… I’m gonna come too">>
<<dialogue "img/character/tara/tarasexavatar6.jpg" "Tara" "No, no—don’t you fucking come inside!">>
@@.option-button;[[Cum|TaraFirstMeet8]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/potionmakingcorner.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You pull out just in time, cock slick and throbbing. Tara scrambles up onto her knees in front of you, tilting her head back, mouth open, tongue out. Her hands grip your thighs, nails digging in as she stares up at you with wild, demanding eyes.
<<dialogue "img/character/tara/tarasexavatar5.jpg" "Tara" "Come on, give it to me—paint my fucking face!">>
You stroke yourself once, twice, and let go.
<img src="img/character/tara/taracumonface1.webp" width=100%>
The cum shot lashes across her cheek and nose, stripes over her open mouth and chin, dripping in heavy strands, mixing with the sweat and smeared her makeup. Pulse after pulse unloads onto her—hot, messy ropes glazing her rude, pretty face until cum drips from her chin onto her pierced breasts and runs in slow rivulets down her neck.
<<dialogue "img/character/tara/tarasexavatar6.jpg" "Tara" "Fuck… look at that load">>
Tara moans low and filthy the whole time, catching what she can on her tongue, letting the rest mark her skin. When you’re finally spent, she licks her lips, drags a finger through the mess on her tits, and sucks it clean with a wicked, satisfied grin.
<<dialogue "img/character/tara/tarasexavatar1.jpg" "Tara" "So… worth the investment?">>
<<dialogue $playerAvatar "You" "Yes">>
<<dialogue "img/character/tara/tarasexavatar2.jpg" "Tara" "So… 1 flask of this thing is 5G. Cash up front">>
<<dialogue $playerAvatar "You" "$5000? That’s steep, Tara">>
<<dialogue "img/character/tara/tarasexavatar3.jpg" "Tara" "Steep? I’m gonna be fucking bedridden till next week, asshole">>
<<dialogue $playerAvatar "You" "Fine. $5000">>
<<dialogue "img/character/tara/tarasexavatar4.jpg" "Tara" "That’s what I thought">>
<<dialogue $playerAvatar "You" "You need any help?">>
<<dialogue "img/character/tara/tarasexavatar5.jpg" "Tara" "I can take care of myself">>
You give her one last look, nod, and step through the curtain.
@@.option-button;[[Leave|TaraFirstMeet9]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/potionmakingcorner.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if !$TaraSexScene1>>
<<set $TaraCall1Time to setup.changeDate($now, 'days', 2)>>
<<set $TaraSexScene1 = 1>>
<<set $TaraFirstMeet = 1>>
<<set $TaraPhoneCall1 = 1>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $unlockedCharacters.tara = true>>
<<run addWallpaper("img/character/tara/tarawallpaper1.jpg")>>
<<run setup.showNotification("📸New Wallpaper Unlocked!")>>
<<run setup.showNotification("💋New Character Unlocked: Tara!")>>
<<run updateGuideTextForStoryline("Tara", "Tara will call you back. Time: " + formatGameDateTime($TaraCall1Time))>>
<<run addContact("Tara Thompson", "img/character/tara/taraavatar.jpg", "555-6754", "", "CallingTara")>>
<<run setup.showNotification("Added Tara to your contact")>>
<<goto "Sex Shop">>
<<elseif $TaraSexScene1 == 1>>
<<goto "Tara Hint">>
<</if>>
<img src="img/character/tara/tara1.jpg" width=100%>
Full Name (Alias): Tara Thompson
Actress's name: Cubbi Thompson
Age: 32
Height: 4'11" (149 cm)
Weight: 109 lbs (49 kg)
Build: 112-71-91 cm (44-28-36), compact and top-heavy, carrying herself with unapologetic confidence
Eye Color: Blue – sharp, mocking, always daring someone to say the wrong thing
Hair: Blonde, often worn messy on purpose
Skin Tone: Fair
Scars/Tattoos: Heavy ink coverage — right arm from bicep to forearm and hand (multiple designs, including a Dark Mark); left hand/finger design; left thigh “Hocus”; right thigh “Pocus”; left calf design; shark drawing on her left side
Piercings: Both nipples; navel
Background
Origin: Born and raised in Bason
Occupation: Owner of the local sex shop; secretly practices potion-making behind the counter and after hours.
Personality: Vulgar, sharp-witted, and fearless. Rude, coarse, and proudly offensive.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $TaraSexScene1 is 1>>
<<button [img[img/character/tara/taramissionary1.webp][TaraFirstMeet]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/tara/taramissionary1.webp]]
</div>
<</if>>
<b>Tara Missionary Sex 1</b>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
The front door of the station slams so hard the glass rattles. You look up just in time to see Danni marching across the floor, eyes blazing, hair half a mess like she didn’t even bother checking a mirror before leaving the house. She doesn’t stop at the desk. She’s coming straight for you.
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "This is bullshit. This whole fucking town is bullshit">>
<<dialogue $playerAvatar "You" "Ms. Varga...">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "No! You told me to change the lock and you will kêp an eye on me. Remember that? Well, guess what? They broke in again. New lock. Deadbolt. Didn’t matter">>
<<dialogue $playerAvatar "You" "We’re not doing this out here. Let talk in my office">>
@@.option-button;[[Invite Danni to you office|DanniTalk2.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsdreception.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<nobr>><<widget "setPassageStyle">>
<style>
body {
min-height: 100vh !important;
}
.passage {
overflow: hidden !important;
background: rgba(0, 0, 0, 0.4) !important;
padding: 25px !important;
border-radius: 15px !important;
border: 1px solid rgba(255, 255, 255, 0.2) !important;
margin: 20px auto !important;
width: 1000px !important;
max-width: 90% !important;
}
</style>
<</widget>><</nobr>>
<<nobr>><<widget "setPassageVariableMap">>
<<set _showMap to true>>
<<set $prevPassage = passage()>>
<<if $hunger >= 259200000>>
<<set $MCStarve = 1 >>
<<goto "Patient Room">>
<</if>>
<<if $energy <= 0>>
<<goto "Pass Out">>
<</if>>
<<set $now to setup.changeDate($now, 'minutes', 5)>>
<<checkPayday>> <<run showSidebar()>>
<</widget>><</nobr>>
<<nobr>><<widget "setPassageVariableNoMap">>
<<set $prevPassage = passage()>>
<<if $hunger >= 259200000>>
<<set $MCStarve = 1 >>
<<goto "Patient Room">>
<</if>>
<<if $energy <= 0>>
<<goto "Pass Out">>
<</if>>
<<set $now to setup.changeDate($now, 'minutes', 5)>>
<<checkPayday>> <<run showSidebar()>>
<</widget>><</nobr>>
<<nobr>><<widget "dialogue">>
<<set _img = $args[0]>>
<<set _speaker = $args[1]>>
<<set _text = $args[2]>>
<div class="dialogue-box">
<img @src="_img" class="dialogue-avatar" @alt="_speaker">
<div class="dialogue-content">
<div class="dialogue-speaker">_speaker</div>
<div class="dialogue-text">_text</div>
</div>
</div>
<</widget>><</nobr>>Inside your office, you shut the door firmly behind you.
<<dialogue $playerAvatar "You" "Ms. Varga...Tell me exactly what happened">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "It was exactly like last time. The asshole broke into my house and assaulted me">>
<<dialogue $playerAvatar "You" "When did it happens?">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Around midnight, three days ago. I don’t remember the exact time">>
<<dialogue $playerAvatar "You" "You said three days, right?">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "What?">>
<<dialogue $playerAvatar "You" "You said it happened three days ago. I read the file from the previous incident. Why did you wait three—four days to report it to us? You didn’t even call">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "I—I was busy. Work’s been crazy. I had shifts back to back and I just… I didn’t have time to come down here">>
<<dialogue $playerAvatar "You" "Okay">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "I’m done waiting. You said you’d handle it. So handle it. Now">>
<<dialogue $playerAvatar "You" "Please lower your voice">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "No, I want you, specifically, to come to my house tonight and guard the house">>
<<dialogue $playerAvatar "You" "That’s ridiculous">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "What’s ridiculous is my house getting broken into twice and you telling me to be patient">>
<<dialogue $playerAvatar "You" "I’m the sheriff, I don’t do personal bodyguard work">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Then maybe you should start doing your job! I’m not leaving this station until you do what I’m telling you to do">>
You glance at the door. Some townsfolk are gathered outside your office, eavesdropping. This is already turning into a spectacle.
<<dialogue $playerAvatar "You" "Fine. I’ll come by tonight, I’ll stay for a few hours">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "You better be">>
<<dialogue $playerAvatar "You" "Now, please leave">>
@@.option-button;[[Leave|SheriffOffice]]@@
<<set $Danni3 = 0>>
<<set $Danni4 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/sheriffoffice.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Danni", "Come to Danni house at night")>>Danni opens the door almost immediately, like she’s been waiting right behind it.
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "You’re late">>
<<dialogue $playerAvatar "You" "We didn’t talk about the time, so I came as soon as I could">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Did anyone see you?">>
<<dialogue $playerAvatar "You" "We didn’t talk about the time, so I came as soon as I could">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "What ever. come in">>
She leads you down the short hallway, stopping at her bedroom and hesitates, just for a second, then steps aside to let you in.
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "My room, I want you to hide in here and catch that bastard red-handed ">>
<<dialogue $playerAvatar "You" "You want me to hide in your closet and wait for your attacker?">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "No. That’s too obvious. Anyone with half a brain checks the closet">>
<<dialogue $playerAvatar "You" "So what’s your brilliant alternative?">>
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Lie down next to me under the blanket, don't you dare touch me">>
<<dialogue $playerAvatar "You" "Sure, if that’s what you want">>
@@.option-button;[[Lights off|DanniVisit1.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannihouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The room is quiet, just the low hum of the fan and the faint rhythm of Danni’s breathing. She’s on her side, facing away from you, curled under the thin sheet in nothing but an oversized tank top and soft cotton panties. Her dark hair spills over the pillow, one bare leg tangled in the covers.
<img src="img/character/danni/dannisleep1.webp" width=100%>
You slide your hand under the loose hem of her tank top, palm gliding over the warm curve of her ribs until your fingers find the soft weight of her breast. You cup it gently at first, thumb brushing the underside, feeling the steady rise and fall of her breathing. Your grip firms, kneading the full, pliant flesh, rolling her nipple between your fingers until it stiffens into a tight peak. Danni’s eyes flutter open the moment your fingers pinch her nipple a little too hard. For a split second she’s groggy, then the role snaps into place like a switch flipping. Her body goes tense.
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "Hey… what the fuck? What are you doing? I will report you">>
<<dialogue $playerAvatar "You" "Be my guest">>
She twists away from you, scrambling toward the edge of the bed like she’s trying to escape. You’re already moving. You grab her hips before she can get far, hauling her back across the mattress. She lets out a startled yelp that melts into a needy moan the second your hand tightens.
<<dialogue "img/character/danni/danniavatar.jpg" "Danni" "No, wait… don’t">>
@@.option-button;[[Fuck her|DanniVisit1.2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/danni/dannidoggysex1.webp" width=100%>
You yank her panties down just enough and drive into her from behind in one deep thrust, standing doggy style. Danni cries out, a high, broken moan that echoes in the quiet room. Her hands claw at the sheets and her whole body jolts forward, reaching orgasm.
<<dialogue "img/character/danni/dannisexavatar0.jpg" "Danni" "OH FUCK! This...It was you">>
<<dialogue $playerAvatar "You" "Looks like your cunt is already molded to the shape of my cock. You recognized me right away, didn't you?">>
You start pounding her hard, one hand fisted in her hair, the other gripping her hip to keep her steady. Each thrust slams her forward, her breasts swinging beneath the loose tank top.
<<dialogue "img/character/danni/dannisexavatar1.jpg" "Danni" "Ahh! Ahh! No, you're wrong">>
<<dialogue $playerAvatar "You" "You keep lying to yourself. Let me help you with that">>
@@.option-button;[[Fuck her harder|DanniVisit1.3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/danni/dannitacklesex1.webp" width=100%>
You lunge forward and catch Danni’s wrists before she can crawl away, pinning both arms behind her back with one hand. She gasps, her body folding forward. Her tank top rides up completely now, breasts swaying free beneath her. You drive back into her in one hard thrust, deeper than before.
<<dialogue "img/character/danni/dannisexavatar2.jpg" "Danni" "OHHH FUCK!">>
<<dialogue $playerAvatar "You" "After those nights when I've fucked your brains out, I swing by your house. And every single time, there you are fucking yourself with a cucumber, begging me to come back">>
You start fucking her harder, hips slamming against her ass with sharp, rapid strokes. The bedframe rattles against the wall. Each thrust jolts her forward, her pinned arms flexing uselessly as she grips the sheets.
<<dialogue "img/character/danni/dannisexavatar6.jpg" "Danni" "Nnngh! Nnngh! you... were spying on me?">>
<<dialogue $playerAvatar "You" "Yeah">>
<<dialogue "img/character/danni/dannisexavatar7.jpg" "Danni" "Mmmph! Mmmph! No...That’s not what it looked like">>
<<dialogue $playerAvatar "You" "Is that so?">>
@@.option-button;[[Stop fucking Danni|DanniVisit1.4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You freeze mid-thrust, buried deep inside her, hips locked against her ass. The sudden stillness makes Danni’s breath catch sharply. Her pussy flutters around you, hot and slick, still pulsing from her last orgasm. She twists her head to look back at you over her shoulder, eyes wide in panic, wrists still pinned under your grip.
<<dialogue "img/character/danni/dannisexavatar3.jpg" "Danni" "Why… why did you stop?">>
<<dialogue $playerAvatar "You" "Since you can’t be honest with yourself for once, I’m not going to do it for you. If you want it, do it yourself">>
<<dialogue "img/character/danni/dannisexavatar5.jpg" "Danni" "No… I don’t want to… please, just…">>
But her body betrays her instantly. The aphrodisiac-level horniness from the scene is too strong. Her hips start moving on their own, grinding back against you in circles.
<img src="img/character/danni/dannidoggysex3.webp" width=100%>
<<dialogue "img/character/danni/dannisexavatar6.jpg" "Danni" "Mmm...Mmm">>
<<dialogue $playerAvatar "You" "That's it">>
Then the circles turn into slow thrusts. She pushes back harder, sliding your cock almost out before taking you deep again.
<<dialogue "img/character/danni/dannisexavatar7.jpg" "Danni" "Ahh! Ahh! Fuck!">>
<<dialogue $playerAvatar "You" "I’m gonna pump you full of cum until it’s dripping out of you">>
<<dialogue "img/character/danni/dannisexavatar2.jpg" "Danni" "No… please don’t cum inside">>
@@.option-button;[[Cum|DanniVisit1.5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>But her body arches, ass pressing flush against you, walls fluttering wildly around your cock like she’s trying to pull you in. You grip her hips bruisingly tight and thrust forward once, hard, pinning her in place.
You come with a low groan, buried to the hilt. Thick, hot cum flood her, pulse after pulse pumping deep inside her clenching pussy. You hold her down, making sure every drop stays where you put it.
<<dialogue "img/character/danni/dannisexavatar3.jpg" "Danni" "Ahh! Ahh! You came inside me!">>
Her body shakes violently as the sensation pushes her into another orgasm. Her walls milk you greedily, spasming hard around your pulsing cock, drawing out every last spurt.
<<dialogue "img/character/danni/dannisexavatar6.jpg" "Danni" "Ohhh god, ohhh fuck, it’s leaking…So full!">>
She collapses forward onto the mattress, trembling, thighs slick with the mix of both of you. A thick trickle of cum already starts to seep out around your softening cock as you stay inside her a moment longer, letting her feel exactly what she begged you not to do.
<img src="img/character/danni/dannicreampie.webp" width=100%>
You finally pull out slowly. More cum follows, dripping down her folds onto the sheets. Danni stays bent over, panting, moaning softly to herself in the aftershock.
@@.option-button;[[Leave|DanniVisit1.6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if !$DanniSexScene3>>
<<set $DanniSexScene3 = 1>>
<<set $moral -= 5>>
<<set $Danni4 = 0>>
<<set $now to setup.changeDate($now, 'hours', 5)>>
<<run updateGuideTextForStoryline("Danni", "You have reached the end of this update")>>
<<goto "North Residential Area">>
<<elseif $DanniSexScene3 == 1>>
<<goto "Danni Hint">>
<</if>>
<<nobr>><<set $DanniMasturbateChance = Math.floor(Math.random() * 100)>>
<<if $DanniMasturbateChance <= 50>>
<img src="img/character/danni/dannimasturbate1.webp" width=100%>
<<else>>
<img src="img/character/danni/dannimasturbate2.webp" width=100%>
<</if>><</nobr>>
@@.option-button;[[Leave|DanniHouse]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/dannihouse/dannibedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Your phone vibrates in your pocket. It's Tara's number. You thumb the green button and put it to your ear.
<<dialogue $playerAvatar "You" "Yeah">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Hey, it’s Tara. You fucked me a few days earlier, remember? Listen, I need you to come down here right now">>
<<dialogue $playerAvatar "You" "What’s this about? I'm in a hurry">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "I’m not talking about this shit over the phone, alright? Just… trust me, you’ll want to see it in person. Get your ass over here">>
She hangs up without a goodbye.
@@.option-button;<<link "Go Back">><<goto $prevPassage>><</link>>@@
<<set $now to setup.changeDate($now, 'minutes', 10)>>
<<set $TaraPhoneCall1 = 0>>
<<set $TaraTalk1 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mountain/mountscarletveil.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Tara", "Meet Tara at sex shop")>><div class="location-banner">Nightclub</div>
<<setPassageVariableNoMap>><<set $GloryHole1 = 0>>
The nightclub is open!
The pounding bass of the nightclub greets you before you even step inside. Neon lights flicker against the dark walls, and the air is thick with sweat, perfume, and the unmistakable scent of spilled liquor. You push through the crowd, weaving between partygoers lost in the music.
<<nobr>><<if $Case1NightClubCCTV == 1 and $Charisma >= 3 and $Intelligence >= 3 and $energy >= 10>>
@@.option-button;<<link "Ask for CCTV">><<goto "Case1CCTV1">><<set $energy to Math.max($energy - 10, 0)>><</link>>@@
<<elseif $Case1NightClubCCTV == 1>>
@@.option-button-disabled;Ask for CCTV • 💪 Charisma 3 • 🧠 Intelligence 3 • ⚡ Energy 10@@<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/nightclub/viproom.jpg][VIP Room]]>><</button>>
<div class="location-name"><b>VIP Room</b></div>
</td>
<td>
<<button [img[img/location/nightclub/washroom.jpg][Washroom]]>><</button>>
<div class="location-name"><b>Washroom</b></div>
</td>
<td>
<<button [img[img/location/nightclub/nightclubbar.png][NightclubBar]]>><</button>>
<div class="location-name"><b>The Bar</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/nightclub/nightclub0.png][Nightclub]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/nightclub/nightclub.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Hospital</div>
<<setPassageVariableNoMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hospital/patientroom.png][Patient Room]]>><</button>>
<div class="location-name"><b>Patient Room</b></div>
</td>
<td>
<<button [img[img/location/hospital/doctoroffice.png][Doctor Office]]>><</button>>
<div class="location-name"><b>Doctor Office</b></div>
</td>
<td>
<<button [img[img/location/hospital/hospital.jpg][Hospital]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if $EvelynTalk3 == 1 and $now >= $EvelynTalk3Time>>
<<goto "DoctorVisit2">>
<</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/hospitalinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Church</div>
<<setPassageVariableMap>>
<<nobr>><<if setup.isOpeningHours($now)>>@@.option-button;[[Sister Maria]]@@<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/church/confessional.jpg][Confessional]]>><</button>>
<div class="location-name"><b>Confessional</b></div>
</td>
<td>
<<button [img[img/location/church/graveyard.jpg][Graveyard]]>><</button>>
<div class="location-name"><b>Graveyard</b></div>
</td>
<<if $Chapter1TrueEnding == 1 and $inventory["Key Makers Toolbox"]>>
<td>
<<button [img[img/location/church/circleofsins.png][Church Restricted Area]]>><</button>>
<div class="location-name"><b>Break in</b></div>
</td>
<<else>>
<td class="locked">
<<button [img[img/various/locked.png][Church Restricted Area]]>><</button>>
<div class="location-name"><b>Church Restricted Area</b></div>
</td>
<</if>>
</tr>
<tr>
<td>
<<button [img[img/location/church/church.jpg][Church]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/churchhall.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner"> Town Hall</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/townhall/mayorsecretaryworkplace.png][Mayor Office]]>><</button>>
<div class="location-name"><b>Mayor Office</b></div>
</td>
<td>
<<button [img[img/location/townhall/townhall.jpg][TownHall]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/townhall/townhallinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Mall</div>
<<setPassageVariableMap>>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/mall/gym.jpg][Gym]]>><</button>>
<div class="location-name"><b>Gym</b></div>
</td>
<td>
<<button [img[img/location/mall/cinema.jpg][Cinema]]>><</button>>
<div class="location-name"><b>Cinema</b></div>
</td>
<td>
<<button [img[img/location/mall/mallsecurity.jpg][Mall Security Office]]>><</button>>
<div class="location-name"><b>Mall Security Office</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/mall/restaurant.png][Fancy Restaurant]]>><</button>>
<div class="location-name"><b>Fancy Restaurant</b></div>
</td>
<td>
<<button [img[img/location/mall/mall.jpg][Mall]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mall/mallinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Court</div>
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
@@.option-button;[[Get inside|CourtInside]]@@
<<else>>
<<goto "Court">>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/court/court.png][Court]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/court/courtinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You push through the back door of the Sex Shop. Tara’s already there, perched on the workbench in the same black faux leather zipper fish net corset.
<<dialogue $playerAvatar "You" "You said the potion would turn you into a train wreck, but you look fine to me">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "No shit, Sherlock... Last time we fucked—after I drank that? I was braced for the crash. But it never fucking came">>
<<dialogue $playerAvatar "You" "So… it worked?">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Technically">>
<<dialogue $playerAvatar "You" "What do you mean?">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "I think I accidentally nailed the perfect recipe. Something in that last batch—the exact drop of whatever I threw in...">>
<<dialogue $playerAvatar "You" "But...">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "But I was so fucked-out and high on endorphins I didn’t write it out">>
She kicks the leg of the workbench, hard enough to rattle the vials.
<<dialogue $playerAvatar "You" "So what now?">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Back to scratch, of course...">>
Tara’s voice drops, the usual coarse edge softening as she steps closer, gray eyes flicking up to meet yours with something almost vulnerable beneath the tough-girl mask.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "This batch could be it. I’ve never gotten this close before. So please, Sheriff. Please help me out here. There are wild mushrooms here in Bason. They’re rare this time of year, but they’re still out there. Can you gather some for me? It’s the red one, if I remember correctly. I only need five">>
<<dialogue $playerAvatar "You" "Oh, suddenly you’re not a rude bitch anymore?">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Fuck you. You think you’re funny? Get the hell out of my shop, you smug bastard!">>
She keeps pushing, herding you toward the front door like she’s corralling a stray dog.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Don’t you dare not come back with those shrooms!">>
@@.option-button;[[Leave|SexShopInside]] @@
<<set $TaraTalk1 = 0>>
<<set $TaraMushroom1 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/potionmakingcorner.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Tara", "Find red mushroom for Tara. You need to go deeper into the park")>><h2>Red Mushroom</h2><img src="img/item/mushroom1.png" width =100%>
<p><strong>Type:</strong> Consumable</p><p><strong>Full Description:</strong> Red mushroom, Maybe edible.</p><<nobr>><<if not $inventory["Red Mushroom"] or not $inventory["Red Mushroom"].quantity>>
<p style="color: red; font-weight: bold;">No Red Mushroom left</p>
<<else>>
<p><strong>Quantity:</strong> <<print $inventory["Red Mushroom"].quantity>></p>
@@.option-button;<<link "Eat">><<useItem "Red Mushroom">><<goto "BADEnding3Bundle1">><<run $('.popup-overlay').remove()>><</link>>@@<</if>><</nobr>><<dialogue "img/character/tara/taraavatar.jpg" "Tara" "You got ’em">>
<<dialogue $playerAvatar "You" "Yeah, I got you five red ones">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "That’s what I’m talking about!">>
She sets the bag down like it’s fragile, then looks at you again.
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "You didn’t try eating it, did you? It’s poisonous">>
<<dialogue $playerAvatar "You" "Of course not">>
<<dialogue "img/character/tara/taraavatar.jpg" "Tara" "Good. Anyway, the door’s open for you now. For real. You want to watch me work on the next batch, or do you want to make a potion of your own? Be my guest">>
<<dialogue $playerAvatar "You" "I appreciate it, Tara">>
@@.option-button;[[Leave|SexShopPotion]] @@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $TaraMushroom1 = 0>>
<<set $MakingPotion = 1>>
<<useItem "Red Mushroom" 5>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/potionmakingcorner.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Tara", "You have reached the end of this update")>><div class="location-banner">Sex Shop</div>
<<setPassageVariableNoMap>>
<<nobr>><<if setup.isOpeningHours($now)>>
@@.option-button-disabled;WORK IN PROGRESS@@
<<else>>
<<goto "Sex Shop">>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/sexshop/potionmakingcorner.jpg][SexShopPotion]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/sexshop/potioncauldron.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>It rings twice.
<<set $tempdate to setup.changeDate($now, "days", 2)>><<set $MarinaAbuseProofTime to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 6, 0)>>
Marina answers on the third, voice soft but steady, the faint clink of ice in a glass in the background.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Hey">>
<<dialogue $playerAvatar "You" "Pizza delivery">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "It's fine. I'm alone">>
<<dialogue $playerAvatar "You" "I need a favor… and you might not like it">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Okay, tell me what you need">>
<<dialogue $playerAvatar "You" "I need proof that McMahon abused you">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Proof? Like video proof?">>
<<dialogue $playerAvatar "You" "Yeah, but here’s the part you’re not going to like. I need a clear video recording of Jack hitting you—the harder, the better. You’ll need to set up a camera somewhere that captures everything, then provoke him somehow... Marina, are you listening to me?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "I'm listening">>
<<dialogue $playerAvatar "You" "I'm not forcing you to do this, Marina">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "It’s fine. I made this decision a long time ago. If this gets me out, a bruised eye is worth it. So once I get you the evidence, you want me to report him?">>
<<dialogue $playerAvatar "You" "Yes, but it’s better if you do it anonymously">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Okay, leave it to me">>
<<dialogue $playerAvatar "You" "Just… don’t get yourself killed">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Don't worry">>
<<dialogue $playerAvatar "You" "How can I?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" ". . .">>
<<dialogue $playerAvatar "You" "I’ll also need you to collect documents related to McMahon’s banking activity, It’ll be useful when the time comes">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Understood. I’ll gather as much as possible">>
<<dialogue $playerAvatar "You" "Okay, that’s all. Goodbye, Marina">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Goodbye, sheriff">>
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<set $MarinaCall3 = 0>><<run hideSidebar()>>
<<set $MarinaAbuseProof = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mountain/mountscarletveil.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<if $HowardTalk2 <= 1 and $PaolaTalk1 == 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "🔲Go to Hair Salon\n🔲Go to the Hotel Lounge\n✅Call Marina")>>
<<elseif $HowardTalk2 <= 1 and $PaolaTalk1 == 0>>
<<run updateGuideTextForStoryline("Chapter I Guide", "✅Go to Hair Salon\n🔲Go to the Hotel Lounge\n✅Call Marina")>>
<<elseif $HowardTalk2 == 2 and $PaolaTalk1 == 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "🔲Go to Hair Salon\n✅Go to the Hotel Lounge\n✅Call Marina")>>
<<else>>
<<run updateGuideTextForStoryline("Chapter I Guide", "✅Go to Hair Salon\n✅Go to the Hotel Lounge\n✅Call Marina\n🎯Go to BSD. Time: "+ formatGameDateTime($MarinaAbuseProofTime))>>
<</if>><img src="img/character/gabbie/gabbiemasturbate1.webp" width=100%>
You shove her aside. Gabbie stumbles back and collapses onto the bed. She peels off her top in one impatient yank, breasts bouncing free, full, heavy, nipples already peaked and begging then shoves her shorts and panties down her thighs, kicking them aside. Naked and already glistening with sweat, she drops onto the couch facing you, legs spreading wide, knees hooked over the arms so you have an unobstructed view.
<<dialogue "img/character/gabbie/gabbiesexavatar3.jpg" "Gabbie" "Mmmph… nngh… fuck, it’s burning">>
Her fingers dive straight between her thighs. Two slide into her dripping cunt with a loud, wet schlick, curling deep immediately. She starts pumping them fast, palm grinding hard against her swollen clit in frantic circles.
<<dialogue "img/character/gabbie/gabbiesexavatar5.jpg" "Gabbie" "Huuuh… huuuh… ">>
@@.option-button;[[Fuck her|GabbieDrugSex2]]@@
@@.option-button;[[Watch her|GabbieDrugSex1.2]]@@
<<if !$GabbieSexScene1>><<set $GabbieDrugSex1 = 0>><</if>>
<<run hideSidebar()>>
<<audio "NightClub" stop>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gabbiehouse/gabbiehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.4) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/gabbie/gabbiemasturbate2.webp" width=100%>
She pulls out a thick vibrator. The sight of it makes her bite her lip hard.
<<dialogue "img/character/gabbie/gabbiesexavatar2.jpg" "Gabbie" "Fuck… this’ll do">>
Gabbie spreads her legs even wider, knees hooked over the couch arms, completely exposed. She presses the vibrating head against her swollen clit first, and her whole body jerks like she’s been shocked.
<<dialogue "img/character/gabbie/gabbiesexavatar5.jpg" "Gabbie" "Mmmph… nngh… so good…">>
Her back arches off the couch, legs shaking, the vibrator buried to the hilt as the orgasm crashes through her. She screams, a raw, broken sound—hips bucking wildly while her pussy pulses and clenches around the buzzing toy.
<<dialogue "img/character/gabbie/gabbiesexavatar4.jpg" "Gabbie" "Ahh! Ahh! Cumming—I'm cumming so hard!">>
@@.option-button;[[Fuck her|GabbieDrugSex2]]@@
@@.option-button;[[Leave|GabbieDrugSex6]]@@
<<run hideSidebar()>>
<<audio "NightClub" stop>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/gabbiehouse/gabbiehouse.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.4) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You barely get two steps into the station before David’s voice cuts through the noise.
<<dialogue "img/character/david/david.png" "David" "Sheriff. In here. You’re going to want to see this">>
You go to the David's desk. Selena and Riley is already there.
<<dialogue $playerAvatar "You" "What’s going on?">>
David doesn’t answer right away. He closes the door behind you instead, then nods at Riley. Riley presses play.
<<dialogue "img/character/david/david.png" "David" "Show him">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "You are going to like this">>
<img src="img/character/marina/marinarebel.webp" width=100%>
You already know what happens in the video, but you play along anyway
<<dialogue $playerAvatar "You" "What the hell…">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "That’s McMahon, sir. Even if she provoked him first, it’s still abuse to hit her like that">>
<<dialogue $playerAvatar "You" "Where did this come from?">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "It was sent to the department inbox about twenty minutes ago. No name. No return address">>
<<dialogue "img/character/david/david.png" "David" "Can we trace where it came from?">>
<<dialogue $playerAvatar "You" "No, no. There’s no point. This is already enough evidence to bring him in for domestic abuse">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "What about the woman, sir?">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "If this video came out without his knowledge, she’s at risk">>
<<dialogue $playerAvatar "You" "You are right">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Fuck yeah, I’ve been waiting forever to arrest this smug bastard">>
<<dialogue $playerAvatar "You" "Very well. I’ll leave the arrest of McMahon in your hands, all of you. Locate him and bring him in">>
<<dialogue "img/character/david/david.png" "David" "What about you?">>
You point your finger at the screen.
<<dialogue $playerAvatar "You" "I’ll make sure she’s safe. Any questions?">>
<<dialogue "img/character/david/david.png" "David" "That's all">>
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "No, sir">>
<<dialogue "img/character/selena/selenaavatar.jpg" "Selena" "Let’s go get that son of a bitch">>
@@.option-button;[[Leave|SquadRoom]]@@
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $MarinaAbuseProof = 0>>
<<set $MarinaRescue = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to Spade Mansion at night")>>You slip through the side entrance without forcing anything. There are gunmen patrolling around the mansion, but that’s the least of your concern. With ease, you make your way inside the mansion until you hear voices.
<<dialogue "img/character/others/mcmahonthug1.png" "???" "You’ve ruined everything, do you have any idea what you’ve done to him?">>
You recognize the voices from the last time you were here. It’s the butler and Marina. It’s just the two of them in the kitchen. Marina stands near the counter, hands clenched at her sides. The butler blocks the only clear path out.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "He’s been arrested, It’s over">>
<<dialogue "img/character/others/mcmahonthug1.png" "???" "No. No. Not if you are fucking gone">>
He reaches into his coat. The knife flashes into view.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Stay back!">>
You step out of the shadows. You don’t hesitate. You fire once. The shot is deafening in the quiet kitchen. The round catches him center-mass, high chest. The butler staggers, knife clattering to the tile, then drops hard, knees first, then face. Blood spreads fast across the white shirt, dark and wet.
<<dialogue "img/character/others/mcmahonthug1.png" "???" "You fuckkk... You">>
Marina gasps, hand flying to her mouth, eyes wide on the body. You step over his dead body without looking down, holster the gun, and move straight to her.
<<dialogue $playerAvatar "You" "You okay?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Yeah. Yeah, I’m… I’m fine">>
<<dialogue $playerAvatar "You" "They must have heard the gunshot. We don’t have much time. Follow me, Marina">>
@@.option-button;[[Go|SpadeMansionLivingroom]]@@
<<set $MarinaRescueTurn = 10>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.6) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Spade Mansion</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/spademansion/spademansiondiningroom.png][SpadeMansionDiningroom]]>><</button>>
<div class="location-name"><b>Diningroom</b></div>
</td>
<td>
<<button [img[img/location/spademansion/spademansionbedroom.png][SpadeMansionBedroom]]>><</button>>
<div class="location-name"><b>Bedroom</b></div>
</td>
<td>
<<button [img[img/location/spademansion/spademansionbathroom.png][SpadeMansionBathroom]]>><</button>>
<div class="location-name"><b>Bathroom</b></div>
</td>
</tr>
<tr>
<<if $MarinaRescue == 1>>
<td class="locked">
<<button [img[img/various/locked.png][Spade Mansion]]>><</button>>
<div class="location-name"><b>You can't leave</b></div>
</td>
<<else>>
<td>
<<button [img[img/location/spademansion/spademansion.png][Spade Mansion]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
<</if>>
</tr>
</table><</nobr>>
<<if $MarinaRescue == 1 and $MarinaRescueTurn > 0>>
<<run hideSidebar()>>
<<set $MarinaRescueTurn -= 1>>
<<run setup.showNotification("❗You have "+$MarinaRescueTurn+" turns left")>>
<<else>>
<<goto "BadEnding6Bundle1">>
<</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Spade Mansion</div>
<<setPassageVariableNoMap>>
<<if $MarinaRescue == 1>><<if !$MarinaRescueVIPCardSteal>>@@.option-button;<<link "Steal VIP card">><<set $MarinaRescueTurn += 1>><<set $MarinaRescueVIPCardSteal = 1>><<addItem "Nightclub Member Card" "img/item/nightclubmembercard.png" "Membership card to access the VIP area in the nightclub." "" "Card" 20000 1>><<goto "SpadeMansionBedroom">><</link>>@@<</if>>
@@.option-button;[[Cellar door|SpadeMansionCellarDoor]]@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/spademansion/spademansiondiningroom.png][SpadeMansionDiningroom]]>><</button>>
<div class="location-name"><b>Diningroom</b></div>
</td>
<td>
<<button [img[img/location/spademansion/spademansionlivingroom.png][SpadeMansionLivingroom]]>><</button>>
<div class="location-name"><b>Livingroom</b></div>
</td>
<td>
<<button [img[img/location/spademansion/spademansionbathroom.png][SpadeMansionBathroom]]>><</button>>
<div class="location-name"><b>Bathroom</b></div>
</td>
</tr>
<tr>
<<if $MarinaRescue == 1>>
<td class="locked">
<<button [img[img/various/locked.png][Spade Mansion]]>><</button>>
<div class="location-name"><b>You can't leave</b></div>
</td>
<<else>>
<td>
<<button [img[img/location/spademansion/spademansion.png][Spade Mansion]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
<</if>>
</tr>
</table><</nobr>>
<<if $MarinaRescue == 1 and $MarinaRescueTurn > 0>>
<<run hideSidebar()>>
<<set $MarinaRescueTurn -= 1>>
<<run setup.showNotification("❗You have "+$MarinaRescueTurn+" turns left")>>
<<else>>
<<goto "BadEnding6Bundle1">>
<</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionbedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Spade Mansion</div>
<<setPassageVariableNoMap>>
<<if !$MarinaRescueMoneySteal>>@@.option-button;<<link "Steal money">><<set $MarinaRescueTurn += 1>><<set $MarinaRescueMoneySteal = 1>><<set $MCMoney += 4000>><<goto "SpadeMansionDiningroom">><</link>>@@<</if>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/spademansion/spademansionlivingroom.png][SpadeMansionLivingroom]]>><</button>>
<div class="location-name"><b>Livingroom</b></div>
</td>
<td>
<<button [img[img/location/spademansion/spademansionbedroom.png][SpadeMansionBedroom]]>><</button>>
<div class="location-name"><b>Bedroom</b></div>
</td>
<td>
<<button [img[img/location/spademansion/spademansionbathroom.png][SpadeMansionBathroom]]>><</button>>
<div class="location-name"><b>Bathroom</b></div>
</td>
</tr>
<tr>
<<if $MarinaRescue == 1>>
<td class="locked">
<<button [img[img/various/locked.png][Spade Mansion]]>><</button>>
<div class="location-name"><b>You can't leave</b></div>
</td>
<<else>>
<td>
<<button [img[img/location/spademansion/spademansion.png][Spade Mansion]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
<</if>>
</tr>
</table><</nobr>>
<<if $MarinaRescue == 1 and $MarinaRescueTurn > 0>>
<<run hideSidebar()>>
<<set $MarinaRescueTurn -= 1>>
<<run setup.showNotification("❗You have "+$MarinaRescueTurn+" turns left")>>
<<else>>
<<goto "BadEnding6Bundle1">>
<</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansiondiningroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Spade Mansion</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/spademansion/spademansiondiningroom.png][SpadeMansionDiningroom]]>><</button>>
<div class="location-name"><b>Diningroom</b></div>
</td>
<td>
<<button [img[img/location/spademansion/spademansionlivingroom.png][SpadeMansionLivingroom]]>><</button>>
<div class="location-name"><b>Livingroom</b></div>
</td>
<td>
<<button [img[img/location/spademansion/spademansionbedroom.png][SpadeMansionBedroom]]>><</button>>
<div class="location-name"><b>Bedroom</b></div>
</td>
</tr>
<tr>
<<if $MarinaRescue == 1>>
<td class="locked">
<<button [img[img/various/locked.png][Spade Mansion]]>><</button>>
<div class="location-name"><b>You can't leave</b></div>
</td>
<<else>>
<td>
<<button [img[img/location/spademansion/spademansion.png][Spade Mansion]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
<</if>>
</tr>
</table><</nobr>>
<<if $MarinaRescue == 1 and $MarinaRescueTurn > 0>>
<<run hideSidebar()>>
<<set $MarinaRescueTurn -= 1>>
<<run setup.showNotification("❗You have "+$MarinaRescueTurn+" turns left")>>
<<else>>
<<goto "BadEnding6Bundle1">>
<</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionbathroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Time runs out, and McMahon’s men catch you.
<<dialogue "img/character/others/mcmahonthug2.png" "???" "Hands up, fuckers">>
You freeze. The Glock in your waistband feels a hundred miles away. You raise your hands. They march you both down to the basement
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "No...Please, don’t lock me down there">>
<<dialogue "img/character/others/mcmahonthug2.png" "???" "As you wish. We'll have fun with you will boss come back">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "What? No">>
The thug kicks you down the basement stairs and locks the door behind you. Marina’s voice echoes once, growing distant, then disappears into complete silence
<<dialogue $playerAvatar "You" "Fuck">>
@@.option-button;[[Wait|BadEnding6Bundle3]]@@
<<set $CapturedByMcMahon1 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.6) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Spade Mansion</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/spademansion/spademansionbedroom.png][SpadeMansionBedroom]]>><</button>>
<div class="location-name"><b>Bedroom</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansiontunnelsystem.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Spade Mansion</div>
<<setPassageVariableNoMap>>
You stand before a cellar door with a digital 4-digit lock.
<<lockPuzzle "7538" "MarinaEscape1">>
@@.option-button;<<linkappend "Hint">>: The fingerprints on the keypad show 3, 5, 7, and 8<</linkappend>>@@<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/spademansion/spademansionbedroom.png][SpadeMansionBedroom]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if !$MarinaEscape0>><<goto "MarinaEscape0">><</if>>
<<if $MarinaRescue == 1 and $MarinaRescueTurn > 0>>
<<run hideSidebar()>>
<<set $MarinaRescueTurn -= 1>>
<<run setup.showNotification("❗You have "+$MarinaRescueTurn+" turns left")>>
<<else>>
<<goto "BadEnding6Bundle1">>
<</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionbedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<nobr>><<widget "lockPuzzle">>
<<set _correctCode to $args[0]>>
<<set _successPassage to $args[1]>>
<<set $lockCode to "">>
<div id="lock-display" style="text-align: center; margin: 20px 0;">
<div style="font-size: 36px; letter-spacing: 15px; background: #222; color: #0f0; padding: 20px; display: inline-block; border-radius: 10px; font-family: 'Courier New', monospace;">
<span id="display">____</span>
</div>
</div>
<div style="text-align: center; max-width: 300px; margin: 0 auto; border: 3px solid #333; border-radius: 15px; padding: 20px; background: #1a1a1a; box-shadow: 0 4px 6px rgba(0,0,0,0.3);">
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 20px 0;">
<<button "1">><<set $lockCode += "1">><<replace "#display">><<displayCode>><</replace>><<replace "#feedback">><</replace>><</button>>
<<button "2">><<set $lockCode += "2">><<replace "#display">><<displayCode>><</replace>><<replace "#feedback">><</replace>><</button>>
<<button "3">><<set $lockCode += "3">><<replace "#display">><<displayCode>><</replace>><<replace "#feedback">><</replace>><</button>>
<<button "4">><<set $lockCode += "4">><<replace "#display">><<displayCode>><</replace>><<replace "#feedback">><</replace>><</button>>
<<button "5">><<set $lockCode += "5">><<replace "#display">><<displayCode>><</replace>><<replace "#feedback">><</replace>><</button>>
<<button "6">><<set $lockCode += "6">><<replace "#display">><<displayCode>><</replace>><<replace "#feedback">><</replace>><</button>>
<<button "7">><<set $lockCode += "7">><<replace "#display">><<displayCode>><</replace>><<replace "#feedback">><</replace>><</button>>
<<button "8">><<set $lockCode += "8">><<replace "#display">><<displayCode>><</replace>><<replace "#feedback">><</replace>><</button>>
<<button "9">><<set $lockCode += "9">><<replace "#display">><<displayCode>><</replace>><<replace "#feedback">><</replace>><</button>>
<<button "CLEAR">><<set $lockCode to "">><<replace "#display">>____<</replace>><<replace "#feedback">><</replace>><</button>>
<<button "0">><<set $lockCode += "0">><<replace "#display">><<displayCode>><</replace>><<replace "#feedback">><</replace>><</button>>
<<button "ENTER">>
<<if $lockCode.length == 4>>
<<if $lockCode == _correctCode>>
<<goto _successPassage>>
<<else>>
<<replace "#feedback">><span style="color: red;">Incorrect code. Try again.</span><</replace>>
<<timed 1s>><<set $lockCode to "">><<replace "#display">>____<</replace>><<replace "#feedback">><</replace>><</timed>>
<</if>>
<<else>>
<<replace "#feedback">><span style="color: red;">Enter 4 digits.</span><</replace>>
<</if>>
<</button>>
</div>
</div>
<div id="feedback" style="text-align: center; margin-top: 10px;"></div>
<</widget>>
<<widget "displayCode">>
<<if $lockCode.length >= 4>>
<<print $lockCode.substring(0, 4)>>
<<else>>
<<print $lockCode + "____".substring(0, 4 - $lockCode.length)>>
<</if>>
<</widget>><</nobr>>The trapdoor opens. Marina hugs you in joy, then without hesitation you both drop through the opening and pull it shut behind you.
It's a tunnel. Narrow, cold concrete swallowing the sound of your footsteps and Marina’s quick, panicked breaths. The emergency strips along the walls cast a sickly white glow, barely enough to see where you’re going. You keep her hand in yours, pulling her forward.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Hah hah hah">>
<<dialogue $playerAvatar "You" "You need to rest?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "No way">>
Marina’s breathing turns ragged, but she doesn’t slow down. She’s tougher than she look Finally, the walls widen. The tunnel ends at a rusted metal ladder bolted to the ceiling. Above it, another trapdoor.
@@.option-button;[[Open the door|MarinaEscape2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansiontunnelsystem.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Your eyes scan for exits, windows too high, balcony too exposed and McMahon's men are closing in.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Here, sheriff. This could be our way out">>
Marina finger lead to cellar door behind the wardrobe. Metal. Reinforced. A keypad glows faintly beside the handle.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Fuck. It’s got a passcode">>
<<dialogue $playerAvatar "You" "Calm down, Marina">>
You pull the folding knife from your pocket, flick it open with a soft snick. Carefully, you slide the blade under the edge of the thin protective plastic film covering the buttons—standard on high-end locks to prevent wear. The film peels away in one piece.
<img src="img/various/spademansioncellarcode.png" width=100%>
<<dialogue $playerAvatar "You" "This is the passcode">>
@@.option-button;[[Go|SpadeMansionCellarDoor]]@@
<<set $MarinaRescueTurn += 1>>
<<set $MarinaEscape0 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionbedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(0.6) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Open the cellar trap door")>>You open it with the same passcode. The keypad beeps. A soft hydraulic hiss. The trapdoor pops open an inch, letting in a rush of cold night air laced with river water and pine. You push it the rest of the way up.
You climb out first, then reach back to pull Marina through. The trapdoor is set into a low earthen berm on the other side of the river, hidden behind a thick stand of willows.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "We made it">>
<<dialogue $playerAvatar "You" "Yeah. We did">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "What now?">>
@@.option-button;[[Bring her home|MarinaEscape3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/route13/route13.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.4) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You bring Marina back to the wine storage.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "You’re living in Salt’s wine storage?">>
<<dialogue $playerAvatar "You" "Temporary. Come on. I just moved to town. No one knows I’m here except Salt, and he doesn’t ask questions">><<if $FrannyCare == 1>>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Okay... And who's that?">>
<<dialogue "img/character/franny/frannyavatar.jpg" "Franny" ". . .">>
Franny steps into the light. She’s wearing one of your old shirt and a pair of sweatpants cinched tight at the waist. Her eyes are wide, wary, but not afraid. She stops a few feet away, arms wrapped around herself, looking between you and Marina.
<<dialogue $playerAvatar "You" "Her name’s Franny. I found her a couple months back">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Found her?">>
You tell Marina the story of how Franny ended up here
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "You’re taking care of her">>
<<dialogue $playerAvatar "You" "Someone has to... Okay, it’s getting late, and I have a big day tomorrow. You can sleep with Franny. She’s mute, so be nice to her, okay?">><<else>>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Alright, no judgment here, hehe">>
<<dialogue $playerAvatar "You" "Anyway, you can go rest over there">><</if>>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Roger that...Oh, I almost forgot. These are the bank documents you wanted">>
<<dialogue $playerAvatar "You" "Thank you, Marina">>
@@.option-button;[[Leave|Wine Storage]]@@
<<set $JackMcMahonReleaseTime to setup.changeDate($now, "days", 1)>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $McMahonJailConfront = 1>>
<<set $MarinaCare = 1>>
<<set $MarinaRescue = 0>>
<<run hideSidebar()>>
<<set $unlockedCharacters.marina = true>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run setup.showNotification("💋New Character Unlocked: Marina!")>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to BSD in the morning.\n McMahon will be released on: "+ formatGameDateTime($JackMcMahonReleaseTime))>>
You walk into the station just after dawn. David walks over to you from his desk.
<<dialogue "img/character/david/david.png" "David" "Sheriff. You’re in early">>
<<dialogue $playerAvatar "You" "Where’s he at?">>
<<dialogue "img/character/david/david.png" "David" "He’s in Cell 2 right now, sir">>
<<dialogue $playerAvatar "You" "Did he put up a fight?">>
<<dialogue "img/character/david/david.png" "David" "He didn’t fight. Didn’t even mouth off. As soon as we said we had video of the assault, he went quiet. No resistance, except for his men barking while we drove him off">>
<<dialogue $playerAvatar "You" "Good work. I’ll speak to him right now">>
@@.option-button;[[Go to Cell 2|McMahonJailConfront1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You step into the dim hallway leading to the holding cells, McMahon sits on the metal bench bolted to the wall, elbows on his knees, head bowed. You stop in front of the bars. He doesn’t look up right away.
Jack lifts his head slowly, eyes bloodshot but sharp. A bitter, humorless laugh escapes him.
<<dialogue "img/character/jack/jackavatar.png" "Jack" "I get it now, everything started going to shit the second you rolled into town, $PlayerInput">>
<<dialogue $playerAvatar "You" "Are you saying I somehow convinced you to hit your wife?">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "I know you’re in on this. I just can’t prove it yet">>
<<nobr>>@@.option-button;<<link "Tell him he’s out of his mind">><<set $McMahonJailConfront2Choice1 = 1>><<goto "McMahonJailConfront2">><</link>>@@
@@.option-button;<<link "Tell him his bail is $80,000">><<set $McMahonJailConfront2Choice2 = 1>><<goto "McMahonJailConfront2">><</link>>@@<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/cell.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Delivery pizza for Taylor Swat">>
<<dialogue $playerAvatar "You" "You got the wrong number">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Who is it?">>
<<dialogue $playerAvatar "You" "Bason Sheriff Department, sheriff $PlayerInput">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "It's me, Marina">>
You can hear it in Marina's voice, she is in a good mood.
<<dialogue $playerAvatar "You" "You sound… cheerful, Marina">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Oh, trust me, I am. After that truck went up in flames, Jack got really paranoid. Serves him right">>
<<dialogue $playerAvatar "You" "Yeah, but you wouldn’t risk calling me just to say that, right?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Nooo, Jack’s been really calm lately. Even with his guys dropping like flies">>
<<dialogue $playerAvatar "You" "That doesn’t sound good">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "That’s what I thought. So I started eavesdropping a little when he made calls">>
<<dialogue $playerAvatar "You" "And?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Jack’s preparing cash. A lot of cash">>
<<dialogue $playerAvatar "You" "What for?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "I don't know, but he did say he wants to take down every last one of them, even if it costs him his entire empire">>
<<dialogue $playerAvatar "You" "Sound like he wasn’t talking about just the bikers">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Oh My God">>
<<dialogue $playerAvatar "You" "We need to figure out what he’s planning and fast. If he’s moving that kind of money, things could spiral out of control before anyone even sees it coming. Keep listening, Marina. Anything you hear, I need to know immediately. No matter how small">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Okay">>
<<dialogue $playerAvatar "You" "Stay safe">>
@@.option-button;<<link "Go Back">><<goto $prevPassage>><</link>>@@
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<set $MarinaCall2 = 0>>
<<set $SheriffOfficePlanning1 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mountain/mountscarletveil.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to your office to think")>>Carrie picks up on the second ring. Her voice is low, awake, edged with that familiar restless energy.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Yeah?">>
<<dialogue $playerAvatar "You" "Carrie. Today's the day">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Okay, walk me through the plan">>
You lay out the plan for Carrie
<<if ($HowardTalk1 <= 1 and $PaolaTalk1 == 1) || ($HowardTalk1 == 2 and $PaolaTalk1 == 1)>>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "I’m not sure about this">>
<<dialogue $playerAvatar "You" "What?">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Call me back when you’ve got a real plan">>
@@.option-button;<<link "Go Back">><<goto $prevPassage>><</link>>@@
<<elseif $HowardTalk1 <= 1 and $PaolaTalk1 == 0>>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Alright, this could work. What do you want from me?">>
<<dialogue $playerAvatar "You" "We don’t have the second half of the safe key, so you’ll have to pick the lock">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "With the first half of the key, this should be easy. The problem is whether our disguise is convincing enough to get past Gabbie">>
<<dialogue $playerAvatar "You" "Don’t worry. I’ve taken care of it">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "So, are we going or not?">>
<<dialogue $playerAvatar "You" "Meet me at the hair salon">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Be there in ten">>
@@.option-button;[[Go to the hair salon|BankHeist2]]@@
<</if>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mountain/mountscarletveil.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if $McMahonJailConfront2Choice1 == 1>>
<<dialogue $playerAvatar "You" "You’re insane. And you’ll answer for your crimes">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "Yeah. Keep telling yourself that, Sheriff. When I get out, which will be soon, we’ll talk again">>
<<dialogue $playerAvatar "You" "Are you threatening a law enforcement officer?">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "GHAH-HA-HA-HA!">><<elseif $McMahonJailConfront2Choice2 == 1>>
<<dialogue $playerAvatar "You" "Your bail’s set at $80,000. But you’re not getting out of here in the next twenty-four hours. That’s plenty of time to sit here and think about what you’ve done">>
Jack’s eyes narrow just a fraction. Then the corner of his mouth lifts in a slow, bitter smirk.
<<dialogue "img/character/jack/jackavatar.png" "Jack" "We’ll talk again, sheriff. I'll make sure of that">>
<<dialogue $playerAvatar "You" "Suit yourself">><</if>>
You just turn and walk away, boots echoing steady down the corridor.
@@.option-button;[[Leave|Cell 2]]@@
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $McMahonJailConfront = 0>>
<<set $BankHeist1 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/cell.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Call Carrie to start the bank heist.\n McMahon will be released on: "+ formatGameDateTime($JackMcMahonReleaseTime))>>You meet Carrie at the front of the salon, you exchange a nod, and head inside
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "The crew member you found is Paola? The hairstylist?">>
<<dialogue $playerAvatar "You" "You know her?">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "It's a small town">>
Paola looks up as you both walk in, eyes flicking from you to Carrie, then back.
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Sheriff, and this is?">>
<<dialogue $playerAvatar "You" "She’s an agent from the state">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Ooh, a spy. Heh heh">>
<<dialogue $playerAvatar "You" "We’re in a hurry, Paola. We need to become these two individuals">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Alright, but just a heads-up. It’s not going to be cheap. If there’s one thing the government isn’t short on, it’s money. I want 5 grand up front">>
<<nobr>>@@.option-button;[[Look at Carrie|BankHeist3]]@@
<<if $MCMoney >= 5000>>@@.option-button;<<link "Give her the money">><<set $BankHeist2Convo1 = 1>><<set $MCMoney -= 5000>><<goto "BankHeist3">><</link>>@@@@
<<else>>
@@.option-button-disabled;Give her the money@@
<</if>><</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hairsalon/hairsalon.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Cell Room</div>
<img src="img/character/jack/jackinjail.png" width=100%>
<<setPassageVariableNoMap>>
Jack McMahon sits alone in the holding cell, hands folded loosely in his lap, posture relaxed as if he’s waiting for a late appointment.
<<dialogue "img/character/jack/jackavatar.png" "Jack" "🎵...Danced some hearty jigs, the water round me bubbling🎵When off Holyhead wished meself was dead...🎵">>
@@.option-button;[[Leave|Cell 2]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/cell.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if $BankHeist2Convo1 == 1>>
<<dialogue $playerAvatar "You" "Here you go">>
<<else>>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Are you serious?">>
<<dialogue $playerAvatar "You" "Come on, Carrie. Help me out here">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Fine, but you’d better pay me back">><<run setup.showNotification("❗Reputation decreased")>><<set $Reputation -= 10>><<set $CarrieMoneyDebt = 1>><</if>>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "You’re actually paying... I mean, hello Benjamin Franklin">>
<<dialogue $playerAvatar "You" "Paola, can we start already?">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Alright. Let’s do this">>
@@.option-button;[[Let Paola do her thing|BankHeist4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hairsalon/hairsalon.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
After four long hours of work, the small back room of the hair salon smells like foundation, hairspray, and coffee gone cold, Paola steps back, wiping her hands on a stained towel. She exhales, long and satisfied.
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Done">>
<<dialogue $playerAvatar "You" "What do you think, Carrie?">>
Carrie touches her own cheek, fingers hovering over the subtle prosthetic that rounds her jaw just enough.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "I do look like her. How long is this disguise going to hold?">>
<<dialogue "img/character/paola/paolaavatar.jpg" "Paola" "Not for long, especially if you’re a sweater">>
<<dialogue $playerAvatar "You" "Then we should get moving ASAP">>
@@.option-button;[[Leave|Hair Salon]]@@
<<set $BankHeist2 = 1>>
<<set $BankHeist1 = 0>>
<<set $now to setup.changeDate($now, 'hours', 4)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hairsalon/hairsalon.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to the bank.\n McMahon will be released on: "+ formatGameDateTime($JackMcMahonReleaseTime))>>You and Carrie step through the bank’s front doors. The lobby is busy, with customers lining up for deposits. No one spares a second glance at the middle-aged man in a faded blue jumpsuit or the elegant redhead in the tailored black dress.
<<if $GabbieDrugSex1 == 0>>
You walk straight to the reception desk. Gabbie is there, still flushed and slightly unsteady from the aphrodisiac. Her blouse is buttoned correctly now, but her eyes are glassy, movements a little too quick, cheeks perpetually pink.
<<else>>You walk straight to the reception desk. Gabbie is there, looking completely fine. Not exactly what you expected, but you can back off now.<</if>>
<<dialogue $playerAvatar "You" "I’d like to access my safe deposit box">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Of course, sir. I’ll have one of our staff assist you immediately">>
<<dialogue $playerAvatar "You" "No, I want you">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Sir...">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Stop being so sluggish. Do you want me to report you to your manager?">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "I’m sorry. I’ll assist you right away">>
<<dialogue $playerAvatar "You" "I need access to safe deposit box number 417 on behalf of the primary owner">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Please, give me your ID">>
<<dialogue $playerAvatar "You" "I’m having my ID reissued right now. Is there another way to verify my identity?">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "I see. Luckily for you, Pacific Standard Bank offers verification via phone call, but there will be an additional fee of $500">>
<<dialogue $playerAvatar "You" "Sure, that’ll do">>
@@.option-button;[[Wait for Gabbie to call|BankHeist6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/bankinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>She reaches for the phone and dials Jack McMahon’s number. She looks at you and Carrie, then down at the phone in her hand.
The line rings… rings… then clicks to voicemail.
<<dialogue $playerAvatar "You" "Call again">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Of course, sir...">>
<<if $HowardTalk2 == 2>>Gabbie redials. This time it rings only twice.
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Good day, Mr. McMahon. This is Gabbie from Pacific Standard Bank. Mrs. McMahon is here with Omar Serviceman, who states he is acting on your behalf. Can you please confirm?">>
The conversation stretches on for five minutes before she ends the call with a soft exhale, almost a sigh. Gabbie walks back to you and Carrie, still a little unsteady on her heels. She’s holding the master key ring, cheeks pinker than before
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "The verification is complete, sir. I’ll escort you both to the safe deposit area">>
@@.option-button;[[Follow Gabbie|BankHeist7]]@@
<<else>>
The line rings… rings… then clicks to voicemail again.
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "There was no answer, sir">>
<<dialogue $playerAvatar "You" "Err...Err">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Maybe you should contact Mr. McMahon">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Idiot...">>
@@.option-button;[[Leave|Bank]]@@
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $BankHeist2 = 0>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to BSD after Jack McMahon gets released.\n McMahon will be released on: "+ formatGameDateTime($JackMcMahonReleaseTime))>>
<</if>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/bankinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if $GabbieDrugSex1 == 0>>
Gabbie leads the way down the short, fluorescent-lit hallway, her heels clicking unevenly on the polished tile. She's still flushed, breathing a little too fast, fingers fidgeting with the edge of her blazer as the drug lingers in her system, you catch her more than once to keep her from falling, Carrie doesn’t seem pleased by that.
<<else>>Gabbie leads the way down the short, fluorescent-lit hallway, her heels clicking unevenly on the polished tile.<</if>>
She swipes her card at the secure door marked "Safe Deposit Area – Authorized Access Only." The lock beeps green, and the heavy door swings open with a soft hydraulic sigh. She turns to you and holds out the key, her hand trembling just slightly
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Here you go, Mr. Serviceman">>
<<dialogue $playerAvatar "You" "Okay. We’ve got it from here. Give us some privacy">>
<<dialogue "img/character/gabbie/gabbieavatar.jpg" "Gabbie" "Of course, sir. Just… call if you need anything">>
She turns and walks out, pulling the door almost closed behind her. Her footsteps fade down the hallway. The door clicks shut.
You turn to Carrie, holding up the key for a moment before pressing it into her palm.
<<dialogue $playerAvatar "You" "Here’s the key. The rest should be easy for you">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "You bet">>
@@.option-button;[[Wait|BankHeist8]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/safedeposite.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Carrie slides the key into the bottom lock of box 417 with a soft, practiced click. The brass door swings open in one smooth motion, revealing a small metal tray inside.
A single black USB drive, along with some cash.
<<dialogue $playerAvatar "You" "No surprise there. He uses Bitcoin to run his operation">>
You slips the USB into your pocket. You close the box door, lock it. You both step back into the hallway.
Gabbie is still at the reception desk, leaning on the counter. She glances up as you pass, You go to her, pay the extra fee, then leave with Carrie.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "I thought you’d gotten rusty. I was wrong">>
<<dialogue $playerAvatar "You" "Thanks">>
@@.option-button;[[Leave|Bank]]@@
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $BankHeist2 = 0>>
<<set $BankHeistLayLow1 = 1>>
<<set $tempdate to setup.changeDate($now, "days", 7)>><<set $BankHeistLayLow1Time to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 9, 0)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bank/bankinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Wait for Greg’s phone call. Time: "+ formatGameDateTime($BankHeistLayLow1Time))>><<if $BankHeistFail1 == 1>>Carrie doesn’t answer, so you head back to BSD
<<elseif $BankHeistFail2 == 1>>McMahon walks free. Carrie leaves you standing on the sidewalk without a word, so you head back to BSD<</if>>
You push through the station’s front doors. David runs up to you.
<<dialogue "img/character/david/david.png" "David" "Sheriff, McMahon’s gone. His lawyer bailed him out this morning">>
<<dialogue $playerAvatar "You" "I know">>
<<dialogue "img/character/david/david.png" "David" "Fuck. We almost had him">>
<<dialogue $playerAvatar "You" "Go back to work, David">>
@@.option-button;[[Leave|BadEnding6Bundle2.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if $CapturedByMcMahon1 == 1>>Half a day passes in the pitch-black basement. The padlock rattles sometime around midday. The bare bulb snaps on, blinding after so long in the dark. Two of McMahon’s men step inside. One yanks you to your feet by the zip-tied wrists.
<<dialogue "img/character/others/mcmahonthug2.png" "???" "Boss's waiting">>
<<dialogue $playerAvatar "You" ". . .">>
The men shove you forward. You stumble but stay on your feet. They tie you to a chair. McMahon puts out his cigar and steps toward you.
<<dialogue "img/character/jack/jackavatar.png" "Jack" "Told you we’d meet again soon, sheriff">>
<<dialogue $playerAvatar "You" "Where is Marina?">><<else>>You come to slowly, head throbbing like someone took a sledgehammer to your skull. The world tilts back into focus in pieces: the taste of blood in your mouth, the bite of zip-ties cutting into your wrists behind the chair, the rough hemp rope lashing your ankles to the legs. You’re outside. Jack McMahon’s backyard. Floodlights harsh overhead, turning the manicured lawn into a stark white stage.
<<dialogue "img/character/jack/jackavatar.png" "Jack" "You finally wake up">>
<<dialogue $playerAvatar "You" "Kidnapping a law enforcer is a serious crime—">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "No need to remind me, sheriff. You think I don’t know about your little plan?">><</if>>
He pulls a phone from his pocket, thumb already moving across the screen. A few taps, and the video call connects. The feed is grainy but clear enough.
Marina is on screen, she is tied to a wooden chair in what looks like a bare basement, wrists bound behind her, mouth gagged with a strip of cloth. The second she sees your face on the other end she jerks forward, the chair creaking.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Sheriff, I'm sorry—">>
<<dialogue $playerAvatar "You" "Marina!">>
McMahon ends the call before she can finish the sentence. The screen goes black. He pockets the phone again, steps closer, crouching so he’s eye-level with you.
<<dialogue "img/character/jack/jackavatar.png" "Jack" "She told me everything, $PlayerInput. About your little plan">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "GHAH-HA-HA-HA. You think there’s anything useful inside that thick head of yours?">>
He stands, straightens his shirt cuffs like this is just another business meeting.
<<dialogue "img/character/jack/jackavatar.png" "Jack" "Greg, I think this man has suffered enough. End his misery, please">>
Greg draws his gun and levels it at your head.
<img src="img/various/gregshooting.webp" width=100%>
<<dialogue "img/character/greg/gregavatar.png" "Greg" "Nothing personal, man. It’s strictly business">>
@@.option-button;[[END|Chapter1Endings]]@@
<<set $Chapter1BadEnding = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You’re halfway down the concrete steps when a black SUV rolls up fast, tires scrubbing the curb. No plates. Tinted windows. Doors fly open before it even stops.
Five, maybe six men in black tactical vests, balaclavas spill out. They move like professionals: two flank you, one grabs your arms, another slams a black hood over your head. You twist, drive an elbow into someone’s ribs, hear a grunt, but a heavy fist cracks against the side of your skull. The world tilts, pain blooming bright behind your eyes.
David bursts out of the station, his Glock already out, and fires a round at the SUV as it disappears around the corner.
<<dialogue "img/character/david/david.png" "David" "Sheriff!">>
@@.option-button;[[. . .|BadEnding6Bundle3]]@@
<<set $CapturedByMcMahon1 = 0>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/bsd.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">???</div>
<<nobr>>
<div class="chapter-end-container">
<div class="doors-container">
<div class="door-wrapper">
<<if $Chapter1BadEnding == 1>>
<div class="door door-unlocked">
<div class="door-panel white">
<div class="vortex-container">
<div class="vortex-ring ring-1"></div>
<div class="vortex-ring ring-2"></div>
<div class="vortex-ring ring-3"></div>
<div class="vortex-ring ring-4"></div>
<div class="vortex-center"></div>
</div>
</div>
<div class="door-info">
<p>ENDING 1: The Bad</p>
<span class="door-link">[[Enter|Chapter1BadEnding]]</span>
</div>
</div>
<<else>>
<div class="door door-locked">
<div class="door-panel black">
<div class="vortex-container locked">
<div class="vortex-ring ring-1"></div>
<div class="vortex-ring ring-2"></div>
<div class="vortex-ring ring-3"></div>
<div class="vortex-ring ring-4"></div>
<div class="vortex-center"></div>
</div>
</div>
<div class="door-info">
<p>ENDING 1: 67% Of Players Have Seen This Ending</p>
</div>
</div>
<</if>>
</div>
<div class="door-wrapper">
<<if $Chapter1TrueEnding == 1>>
<div class="door door-unlocked">
<div class="door-panel white">
<div class="vortex-container">
<div class="vortex-ring ring-1"></div>
<div class="vortex-ring ring-2"></div>
<div class="vortex-ring ring-3"></div>
<div class="vortex-ring ring-4"></div>
<div class="vortex-center"></div>
</div>
</div>
<div class="door-info">
<p>ENDING 2: The Reality</p>
<span class="door-link">[[Enter|Chapter1TrueEnding]]</span>
</div>
</div>
<<else>>
<div class="door door-locked">
<div class="door-panel black">
<div class="vortex-container locked">
<div class="vortex-ring ring-1"></div>
<div class="vortex-ring ring-2"></div>
<div class="vortex-ring ring-3"></div>
<div class="vortex-ring ring-4"></div>
<div class="vortex-center"></div>
</div>
</div>
<div class="door-info">
<p>ENDING 2: 30% Of Players Have Seen This Ending</p>
</div>
</div>
<</if>>
</div>
<div class="door-wrapper">
<<if $Chapter1GoodEnding1 == 1>>
<div class="door door-unlocked">
<div class="door-panel white">
<div class="vortex-container">
<div class="vortex-ring ring-1"></div>
<div class="vortex-ring ring-2"></div>
<div class="vortex-ring ring-3"></div>
<div class="vortex-ring ring-4"></div>
<div class="vortex-center"></div>
</div>
</div>
<div class="door-info">
<p>ENDING 3: The Good</p>
<span class="door-link">[[Enter|Chapter1GoodEnding1]]</span>
</div>
</div>
<<else>>
<div class="door door-locked">
<div class="door-panel black">
<div class="vortex-container locked">
<div class="vortex-ring ring-1"></div>
<div class="vortex-ring ring-2"></div>
<div class="vortex-ring ring-3"></div>
<div class="vortex-ring ring-4"></div>
<div class="vortex-center"></div>
</div>
</div>
<div class="door-info">
<p>ENDING 3: 2% Of Players Have Seen This Ending</p>
</div>
</div>
<</if>>
</div>
<div class="door-wrapper">
<<if $Chapter1GoodEnding2 == 1>>
<div class="door door-unlocked">
<div class="door-panel white">
<div class="vortex-container">
<div class="vortex-ring ring-1"></div>
<div class="vortex-ring ring-2"></div>
<div class="vortex-ring ring-3"></div>
<div class="vortex-ring ring-4"></div>
<div class="vortex-center"></div>
</div>
</div>
<div class="door-info">
<p>ENDING 4: The Better</p>
<span class="door-link">[[Enter|Chapter1GoodEnding2]]</span>
</div>
</div>
<<else>>
<div class="door door-locked">
<div class="door-panel black">
<div class="vortex-container locked">
<div class="vortex-ring ring-1"></div>
<div class="vortex-ring ring-2"></div>
<div class="vortex-ring ring-3"></div>
<div class="vortex-ring ring-4"></div>
<div class="vortex-center"></div>
</div>
</div>
<div class="door-info">
<p>ENDING 4: 1% Of Players Have Seen This Ending</p>
</div>
</div>
<</if>>
</div>
</div>
</div>
<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/white.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.5) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/greg/gregavatar.png" "Greg" "It's Greg">>
<<dialogue $playerAvatar "You" "What do you have for me?">>
<<dialogue "img/character/greg/gregavatar.png" "Greg" "Looks like you successfully pinned the heist on Omar, since he’s dead. McMahon fed the body to the dogs">>
<<dialogue $playerAvatar "You" "Good ridden">>
<<dialogue "img/character/greg/gregavatar.png" "Greg" "McMahon descending into madness, I can convince the other captains to sanction a hit on him. But if one of them takes his place, then everything you’ve done is for nothing">>
<<dialogue $playerAvatar "You" "I see">>
<<dialogue "img/character/greg/gregavatar.png" "Greg" "Your reputation in this town is climbing fast, $PlayerInput. With your help, I can be the new boss. In return, I’ll be the one to pull the trigger">>
<<dialogue $playerAvatar "You" "You will have my support">>
<<dialogue "img/character/greg/gregavatar.png" "Greg" "Great. You’ll hear the good new soon">>
@@.option-button;[[Hang up|Chapter1TrueEndingBundle2]]@@
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mountain/mountscarletveil.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>A few days later, in McMahon’s mansion
<<dialogue "img/character/others/mcmahonthug2.png" "???" "He’s here, boss">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "Let him in">>
McMahon is lying by the pool when Greg steps into view. McMahon notices the silence before he notices the man.
<<dialogue "img/character/greg/gregavatar.png" "Greg" ". . .">>
<<dialogue "img/character/jack/jackavatar.png" "Jack" "Have you forgotten your manners, Greg?">>
Greg draws his gun and levels it at McMahon’s head. McMahon opens his mouth, but no words ever come out.
<img src="img/various/gregshooting.webp" width=100%>
<<dialogue "img/character/greg/gregavatar.png" "Greg" "Hi, Jack... Bye, Jack">>
@@.option-button;[[END|Chapter1Endings]]@@
<<set $Chapter1TrueEnding = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/spademansion/spademansionlivingroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You push through the double doors of Banshee Hospital. Halfway down the corridor, a hand shoots out from an open doorway and yanks you sideways into a dim patient room. The door clicks shut behind you before you can react.
Evelyn stands there, white coat slightly rumpled, glasses perched on her nose, cheeks already flushed. She lets go of your arm like it burned her, then steps back, locking the door with a quick twist.
<<dialogue $playerAvatar "You" "Evelyn?">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Sheriff, I’m sorry, but there’s something important I need to tell you">>
You sit down on the edge of the patient’s bed.
<<dialogue $playerAvatar "You" "Okay, by the way, what happened to you after our last session?">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "After… last time, I experienced one of the most intense orgasms of my entire life. I had to take the day off just to come home and masturbate. Even now, seeing you here, I’m craving it again… Sorry, I got carried away. But I’ve come to a much clearer understanding of your condition">>
<<dialogue $playerAvatar "You" "Tell me, doctor">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Do you know how they make Phalloplasma?">>
<<dialogue $playerAvatar "You" "No I don't">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "That’s understandable. Phalloplasma is a musk compound derived from an extinct hedgehog species known as Erinaceus ferrum, or the Ironback Hedgehog">>
<<dialogue $playerAvatar "You" "extinct?">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Correct, the species is extinct. I was only able to identify phalloplasma because I forwarded a small sample to a colleague of mine at Johns Hopkins. I left out your personal info, obviously">>
<<dialogue $playerAvatar "You" "Okay. I’m fine with that. You drag me into an empty room just to tell me you’re still horny and sent my cum to Baltimore?">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "No. I’ve run out of the sample completely… you have to give me more">>
<<dialogue $playerAvatar "You" "Sure… it’s not like I’m not enjoying this or anything">>
@@.option-button;[[Get hard|DoctorVisit2.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/patientroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Oh crap, I forgot to bring a container">>
<<dialogue $playerAvatar "You" "Let’s head back to your office then">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "There’s no time... You can just… fuck me. Right here. I’ll hold your cum inside my womb. It’ll stay viable long enough for me to get back and collect it properly">>
<<dialogue $playerAvatar "You" "That doesn’t sound like it’ll work">>
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "God, just fuck me already">>
@@.option-button;[[Fuck her|DoctorVisit2.2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/patientroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Wine Storage</div>
<<nobr>><<set $MarinaRestChance = Math.floor(Math.random() * 100)>>
<<if $MarinaRestChance <= 50>>
<img src="img/character/marina/marina1.jpg" width=100%>
<<elseif $MarinaRestChance >50 >>
<img src="img/character/marina/marinaresting.webp" width=100%>
<</if>><</nobr>>
<<nobr>><<if $Chapter1GoodEnding == 1>>@@.option-button;[[Leave this town with Marina|GoodEndingBundle1]]@@<</if>><</nobr>>
<<setPassageVariableNoMap>>
<<nobr>>
<</nobr>><div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bar/saltbar.jpg][SaltBar]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
<td>
<<button [img[img/location/bar/winestorage.jpg][Wine Storage]]>><</button>>
<div class="location-name"><b>Wine Storage</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Marina’s sitting on the edge of the cot, knees drawn up, wearing one of your old flannel shirts over jeans. She looks up the second the door creaks. You set the duffel down gently, walk straight to her, and crouch so you’re level with her.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Sheriff, what’s that for?">>
<<dialogue $playerAvatar "You" "I’m done here. This town’s going to be a powder keg soon. I already got what I wanted, and I want to leave. Tonight. Will you come with me?">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "God, yes. But will Jack come after us?">>
<<dialogue $playerAvatar "You" "Don’t worry about him. He’s got bigger problems right now">>
She launches herself forward, arms wrapping tight around your neck, face buried in your shoulder. She hugs you for a full five minutes.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Thank you, sheriff">>
<<dialogue $playerAvatar "You" "I don’t think I’ll be a sheriff again anytime soon. Call me…">>
@@.option-button;[[Continue|GoodEndingBundle2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Carrie picks up on the second ring.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Hello">>
<<dialogue $playerAvatar "You" "Hey, just wanted to say thank you. For helping me with the heist. This could be a stepping stone to help me put the rest of them down. Who do you think—">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "May I speak first?">>
<<dialogue $playerAvatar "You" "Okay">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "You told me you wanted your cut, and now you have it. There’s no reason for you to cause more chaos in this town anymore. Go wherever you want. Just stay out of his reach">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "Here, I have a home to come back to. That’s enough for me">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "It’s true, I loved you. Twenty years ago, back then, it didn’t matter who I was. Being next to you, pulling heists, stealing diamonds and rubies for Pa. I was happy and I’ll cherish it for the rest of my life">>
<<dialogue $playerAvatar "You" "I know">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "So please don’t do this. You can have all the money on that USB. Please leave this town">>
<<dialogue $playerAvatar "You" "I, I...">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "I'm sorry, I have to go">>
<<dialogue $playerAvatar "You" "Hey, hey...wait...">>
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@
<<set $Chapter1GoodEnding = 1>>
<<set $now to setup.changeDate($now, 'minutes', 15)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/mountain/mountscarletveil.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">New Sheriff Killed in Targeted Explosion on Bason’s East Side</div><<set $tempdate to setup.changeDate($now, "days", 2)>><<set $FakeDeathday1 to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 15, 0)>><<set $tempdate to setup.changeDate($now, "days", 7)>><<set $FakeFuneralday1 to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 10, 0)>>
<div class="styled-line"></div>
BASON — An explosion ripped through a vehicle on East Ridge Road near Hollow Creek Field at approximately <<= setup.getFormattedTime($FakeDeathday1, '24hour-seconds')>> on <<= setup.getFormattedDate($FakeDeathday1, 'eu')>>, killing Bason’s newly appointed sheriff, $PlayerInput, authorities confirmed.
<img src="img/various/chapter1fakedeath.webp" width=50% style="display: block; margin: 0 auto;">
Witnesses reported a deafening blast that could be heard several blocks away, followed by a column of black smoke rising from the open field bordering the road. First responders arrived within minutes to find the vehicle torn apart by what investigators described as a powerful, directed explosion. The sheriff’s body was recovered from the driver’s seat, indicating he was inside the vehicle at the moment of detonation.
At an evening press conference held outside the Bason Sheriff’s Department on Alder Street, officials made it clear the incident was not an accident.
“This was a deliberate and calculated attack,” said an official department spokesperson. “We are treating this as a homicide and will pursue every lead until those responsible are brought to justice.”
Sheriff $PlayerInput had been in Bason for less than two months, arriving from out of town to take over a department after Dean Morgan. Despite his brief tenure, colleagues described him as disciplined, methodical, and unafraid to confront difficult situations.
During his time in office, Sheriff $PlayerInput was credited with solving the murder of Rebecca Lannigan, a high-profile case connected to the local gangsters. That investigation, sources say, may now be a key focus as authorities explore possible motives behind the killing.
A funeral service for Sheriff $PlayerInput will be held on <<= setup.getFormattedDate($FakeFuneralday1, 'eu')>> at <<= setup.getFormattedTime($FakeFuneralday1, '24hour-seconds')>>, at St. Morty’s Church, followed by a procession through downtown Bason.
The investigation remains ongoing.
<div class="styled-line"></div>
@@.option-button;[[Continue|GoodEndingBundle3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/graveyard.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/theisland.webp" width=100%>
At an unnamed island in the South Pacific, white sand stretches in a soft, endless curve, so fine it feels like powdered sugar underfoot. The water is a living jewel, clear enough to see schools of silver fish darting over coral heads even from the veranda. Palm trees lean lazily toward the sea, their fronds rustling in the constant warm breeze, and the air carries the sweet-salt scent of ocean mixed with blooming frangipani.
Marina stands at the edge of the shallows in a thin red bikini that has turned almost transparent from the sea. The fabric clings to her skin, wet and weightless, outlining every curve as the small waves lap at her thighs. She holds a waterproof compact camera in one hand, the strap looped around her wrist. Her auburn hair is slicked back, dark with water, droplets sliding down her neck and chest.
<<if $FrannyCare == 1>>Franny spends her mornings bathing in the sun. Her skin has turned a warm golden tan, her hair bleached almost blond by the light.<</if>>
You wake to the sound of waves instead of alarms, make coffee on the small stove. You call out for <<if $FrannyCare == 1>>the girls<<else>>Marina<</if>>.
<<dialogue $playerAvatar "You" "If you’re free, come over!">>
<<nobr>>@@.option-button;
<<link "Check the date">>
<<if $FrannyCare == 1>>
<<goto "GoodEndingBundle4">>
<<else>>
<<goto "GoodEndingBundle5">>
<</if>>
<</link>>
@@<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/marina/marina1.jpg" width=100%>
Full Name: Marina Harris
Actress's name: Jia Lissa
Age: 29
Height: 5'5" (165 cm)
Weight: 110 lbs (50 kg)
Build: 84-61-89 cm (33-24-35), slim and delicate, with a quiet elegance that often goes unnoticed at first glance
Eye Color: Green – alert, calculating, occasionally softened by nostalgia
Hair: Red, usually worn long, a striking contrast that draws attention despite her reserved demeanor
Skin Tone: Fair, almost porcelain
Scars/Tattoos: Crescent moon tattoo on her lower left leg
Piercings: None listed
Character Overview
Origin: Born in Izhevsk, Udmurtia, Russian Federation
Occupation: Escort
History: Moved to Bason three years ago, carrying little more than a suitcase and a past she rarely speaks about. She worked as an escort to survive in a town that offered few opportunities to outsiders
Turning Point: Her life began to shift after meeting Jack McMahon.
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $MarinaSexScene1 is 1>>
<<button [img[img/character/marina/marinasex1.webp][GoodEndingBundle5]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/marina/marinasex1.webp]]
</div>
<</if>>
<b>Good Ending Sex 1</b>
</td>
<td>
<<if $MarinaFrannySexScene1 is 1>>
<<button [img[img/character/marina/marinafrannysex1.webp][GoodEndingBundle4]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/marina/marinafrannysex1.webp]]
</div>
<</if>>
<b>Good Ending Threesome 1</b>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Marina emerges from the sea like something born from the water itself. Droplets trail down her neck, between her breasts, over the flat plane of her stomach, catching the sunlight in tiny sparks. The camera dangles from her wrist, still dripping, but she’s not thinking about photos anymore.
She walks straight to you across the warm sand, barefoot, unhurried, eyes locked on yours. You pull her into a long, passionate kiss.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Kissing you is making me so fucking horny">>
Your throbbing cock glides between her soft thighs while you trail hot kisses down her neck.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Oh god">>
<<dialogue $playerAvatar "You" "Come here, baby">>
@@.option-button;[[Fuck|GoodEndingBundle5.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Marina climbs onto your lap, straddling you. Her thighs part wide around your hips. She settles her weight down, pressing her hot, slick pussy right against the thick length of your cock. No penetration yet—just the wet glide of her folds sliding along your shaft, coating you in her arousal.
<<dialogue "img/character/marina/marinasexavatar1.jpg" "Marina" "Fuck… feel how wet I am">>
Marina reaches down, fingers wrapping around your shaft, guiding the swollen head to her entrance. Her pussy is already drenched and the moment the tip nudges her folds she lets out a shaky, needy sigh. Your cock slides into her cunt in one long, slow glide. Marina’s walls part around you, gripping tight from the very first inch, velvet heat swallowing you deeper and deeper until her ass settles flush against your thighs and you’re buried to the hilt. Marina starts moving.
<img src="img/character/marina/marinasex1.webp" width=100%>
<<dialogue "img/character/marina/marinasexavatar2.jpg" "Marina" "Ahh… mmmph... Fuuuck">>
<<dialogue $playerAvatar "You" "You are so tight">>
Her ass bounces with every downward thrust, cheeks jiggling softly, the sound of skin meeting skin blending with the distant waves. Her small breasts sway in time with her rhythm, nipples hard and flushed pink in the cooling air.
@@.option-button;[[turn her over|GoodEndingBundle5.2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You grip Marina’s hips firmly and flip her over in one smooth motion. She lets out a surprised gasp that melts into a throaty laugh as she lands on her knees, palms pressing into the towel for balance. Her big, round ass lifts high toward you, red curls tumbling down her back, small breasts swaying beneath her as she arches instinctively. You don’t ease in. You start fucking her fast and relentless , hips snapping forward with brutal rhythm. Each thrust slams into her, the angle letting you hit deep and grind against that perfect spot inside her every single time. Her ass ripples with the impact, cheeks jiggling wildly as you pound her.
<img src="img/character/marina/marinasex2.webp" width=100%>
<<dialogue "img/character/marina/marinasexavatar3.jpg" "Marina" "Ahh! Ahh! Oh god—">>
Her pussy clamps down hard around you, spasming in the first sharp wave of orgasm before she’s even caught her breath. She comes almost immediately, walls fluttering and squeezing, a hot rush of wetness coating your cock and dripping down her thighs onto the towel.
<<dialogue "img/character/marina/marinasexavatar4.jpg" "Marina" "Nnngh! Nnngh! Too much—fuck—">>
<<dialogue $playerAvatar "You" "Marina… fuck, I’m gonna come">>
@@.option-button;[[Cum|GoodEndingBundle5.3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Marina spins around with surprising speed, red curls whipping across her face. Before you can react she pushes you flat onto your back, straddling you in one fluid motion. Her small breasts sway as she plants her hands on your chest, pinning you down with surprising strength.
<<dialogue "img/character/marina/marinasexavatar5.jpg" "Marina" "Fill me up. I want every fucking drop inside me">>
She sinks down hard, taking your entire length in one deep drop. Her walls clamp tight around you instantly, still pulsing from her last climax. You groan low as the first thick rope erupts, flooding her hot cunt. Marina moans loud and broken, grinding down to meet every pulse.
<img src="img/character/marina/marinasex3.webp" width=100%>
<<dialogue "img/character/marina/marinasexavatar6.jpg" "Marina" "Ahh! Yes—fuck—give it to me!">>
Pulse after heavy pulse surges into her, filling her completely. She rocks her hips in slow, deliberate circles, milking you with rhythmic squeezes, drawing out every last spurt until cum starts to leak out around your shaft, creamy white streaking her inner thighs and dripping onto your stomach.
<div class="styled-line"><center><b>5 hours later</b></center></div>
The sun hangs low on the horizon, Marina rides you through one orgasm after another. Untill she collapses forward onto her elbows, trembling, but she keeps rocking back weakly, milking the last spurts out of you. Her pussy flutters and squeezes around your cock, drawing out every drop until it starts leaking out around the base in thick, creamy rivulets, running down her inner thighs and soaking the towel beneath you both. You stay buried inside her, breathing hard, hands sliding up her sides to cup the small, swollen curve of her belly. It’s warm, taut under your palms, the faint outline of fullness pressing against your fingers.
@@.option-button;[[Continue|GoodEndingBundle5.4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Marina finally rolls off you with a soft, exhausted sigh, her body limp and glowing in the starlight. She collapses onto her side next to you on the rumpled beach towel, one leg still draped lazily over your thigh, red curls fanned out across the sand-dusted fabric.
As your softening cock slips free from her swollen, well-fucked cunt, a thick gush of cum immediately follows. It oozes out in slow, creamy waves pooling between her parted thighs in a small, glistening puddle right beneath her
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Love… will McMahon, or that man you told me, ever find us here?">>
You shift your weight, settling beside her so you can see her face clearly. You brush a damp strand of auburn hair from her forehead, thumb lingering on her temple.
<<dialogue $playerAvatar "You" "It’s been three years since we left the town. They’ll never find us. This island doesn’t even have a name on most maps. We’re gone, Marina. Really gone">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Good, because I want to bear your child as soon as possible">>
Her hand slides down to rest low on her own stomach, fingers splaying protectively
<<dialogue $playerAvatar "You" "Until then, I’m not going to stop fucking you">>
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "I’m really looking forward to that">>
<img src="img/various/conceived.webp" width=50% style="display: block; margin: 0 auto;">
@@.option-button;[[END|GoodEndingBundle5.5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if !$MarinaSexScene1>>
<<set $MarinaSexScene1 = 1>>
<<set $Chapter1GoodEnding1 = 1>>
<<goto "Chapter1Endings">>
<<elseif $MarinaSexScene1 == 1>>
<<goto "Marina Hint">>
<</if>>
You head onto the white sand to look for the girls. Marina and Franny are already running toward you, breathless, and they reach you at the same moment.
Marina launches herself into your arms first, legs wrapping around your waist, hands cupping your face as she crashes her mouth against yours in a deep, hungry kiss. You catch her easily, one arm under her thighs, the other around her back.
Franny collides a heartbeat later, throwing her arms around both of you, pressing her cheek to your shoulder. Then she turns her head and kisses Marina’s lips, quick and sweet, before leaning up to claim your lips too.
<<dialogue $playerAvatar "You" "Easy, girls">>
You lower them gently to the sand, setting them on their feet but keeping one arm around each of their waists. They don’t let go either. Marina’s hand slides lower, palming the thick bulge already straining against your shorts. Her lips brush your ear as she whispers, hot and teasing.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Look who’s waking up down there">>
<<dialogue "img/character/franny/frannyavatar.jpg" "Franny" ". . .">>
Marina and Franny slide down your body in perfect sync, kneeling on the warm sand on either side of your hips. Marina hooks her fingers into the waistband of your trunks while Franny tugs from the other side. They pull them down together in one smooth motion. Your cock springs free, rock hard and throbbing, the head already flushed dark and glistening with a bead of pre-cum.
<<dialogue "img/character/marina/marinaavatar.jpg" "Marina" "Fuck, look at him. So ready for us">>
@@.option-button;[[Enjoy|GoodEndingBundle4.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/marina/marinafrannysex1.webp" width=100%>
Marina's tongue flattens against the side of your shaft, dragging up in a broad, wet stripe while Franny mirrors her on the opposite side. They meet at the tip, tongues sliding together over the sensitive crown, swirling and teasing in tandem.
<<dialogue "img/character/marina/marinasexavatar1.jpg" "Marina" "Ahhh… mmm">>
<<dialogue "img/character/franny/frannysexavatar1.jpg" "Franny" "Nnnh…">>
<<nobr>>@@.option-button;[[Marina blowjob|GoodEndingBundle4.2]]@@
@@.option-button;[[Franny blowjob|GoodEndingBundle4.3]]@@
@@.option-button;[[Marina doggy|GoodEndingBundle4.4]]@@
@@.option-button;[[Franny doggy|GoodEndingBundle4.5]]@@
@@.option-button;[[Marina cowgirl|GoodEndingBundle4.6]]@@
@@.option-button;[[Marina reverse cowgirl|GoodEndingBundle4.7]]@@
@@.option-button;[[Cum|GoodEndingBundle4.8]]@@
<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/marina/marinafrannysex2.webp" width=100%>
Marina takes your cock in one long, greedy slide, her lips stretching wide around the head, tongue flat and pressing hard against the underside as she sinks down. Her head bobs fast and deep, cheeks hollowing with hard suction. Every time she pulls back the head pops free with a wet schlop, only for her to plunge down again, taking you to the back of her throat.
<<dialogue "img/character/marina/marinasexavatar2.jpg" "Marina" "Gluk… gluk… gluk…">>
<<dialogue "img/character/franny/frannysexavatar2.jpg" "Franny" "Nnnh… ahh…">>
@@.option-button;[[Change position|GoodEndingBundle4.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/marina/marinafrannysex3.webp" width=100%>
Franny takes the head first, her lips stretching carefully around the thick crown, tongue pressing flat against the underside as she starts to slide down. Inch by inch she sinks, cheeks hollowing slightly, throat relaxing as she forces herself deeper. Her nose brushes your pubic bone when she finally takes you to the root. She holds it there, eyes watering a little, throat fluttering around the head in tiny, rhythmic swallows.
<<dialogue "img/character/franny/frannysexavatar3.jpg" "Franny" "Mmmph… mmmph… ohhh…">>
Marina shifts lower, sliding between your spread legs. She cups your balls gently in one hand, rolling them with slow, teasing pressure while her tongue flicks out to lick the sensitive skin beneath. She laps at them in long, wet strokes, then sucks one into her mouth with a soft slurp, humming low so the vibration travels up to where Franny is still stuffed full.
<<dialogue "img/character/marina/marinasexavatar3.jpg" "Marina" "Mmm… these are so full. Such a good girl, taking every inch…">>
@@.option-button;[[Change position|GoodEndingBundle4.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/marina/marinafrannysex4.webp" width=100%>
You line up behind Marina, grip her hips firmly, and thrust in deep with one smooth stroke. Marina’s head snaps forward on a loud, broken moan. Her pussy grips you immediately, hot and slick, walls fluttering around your length as you bury yourself to the hilt. Hard, rhythmic thrusts that make her big ass ripple and slap back against your hips with every smack-smack-smack.
<<dialogue "img/character/marina/marinasexavatar4.jpg" "Marina" "Ahh! Fuck—yes, Ahhn! Ahhn!">>
While you pound into Marina, your left hand reaches over to Franny. Your fingers slide between her thighs from behind, finding her already drenched folds. You press two fingers inside her without warning, curling them deep toward that sweet spot she loves. Franny’s back arches sharply, a soft, breathy whimper escaping her lips.
<<dialogue "img/character/franny/frannysexavatar4.jpg" "Franny" "Mmm… ahh… nnnh…">>
@@.option-button;[[Change position|GoodEndingBundle4.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/marina/marinafrannysex5.webp" width=100%>
You grip Franny's narrow hips and line yourself up. One smooth thrust and you sink into her tight, dripping heat. Franny’s whole body jolts forward; a sharp, breathy gasp escapes her. Her walls flutter and squeeze immediately, warm and velvet, gripping you like she never wants to let go. You start fucking her steadily from behind.
<<dialogue "img/character/franny/frannysexavatar5.jpg" "Franny" "Mmm… ahh… nnnh…">>
While you pound into Franny, your right hand reaches over to Marina. She’s still on her knees beside you, big round ass swaying slightly, red curls sticking to her sweaty back. Your fingers find her swollen, slick, hypersensitive clit and you start circling it with firm, steady pressure.
<<dialogue "img/character/marina/marinasexavatar5.jpg" "Marina" "Oh fuck—I’m so sensitive there">>
@@.option-button;[[Change position|GoodEndingBundle4.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/marina/marinafrannysex6.webp" width=100%>
Marina swings one leg over your hips. She reaches down between her legs, wraps her fingers around your slick cock, and guides the head to her entrance. She starts riding immediately, grinding her clit against your pelvis in lazy circles. Then she picks up speed, lifting and dropping with steady, wet slap-slap-slap sounds that mix with the distant waves. Marina’s walls flutter around your cock, clenching tighter with every thrust
<<dialogue "img/character/marina/marinasexavatar6.jpg" "Marina" "Ahh! Fuuuck… so deep!">>
Franny crawls up your body, knees planting on either side of your head, her cute pussy hovering above your face. She lowers herself carefully untill her smooth, slick pussy settling right over your mouth. You start eating her eagerly—long, flat strokes of your tongue from entrance to clit, then circling the swollen nub with quick, teasing flicks. Franny’s thighs tremble around your ears; her fingers thread into your hair, holding on without pulling.
<<dialogue "img/character/franny/frannysexavatar6.jpg" "Franny" "Nnnh… ahh… mmm…">>
@@.option-button;[[Change position|GoodEndingBundle4.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/marina/marinafrannysex7.webp" width=100%>
The head of your cock nudges Franny’s entrance. Marina reaches down, fingers spreading Franny’s swollen lips wider, guiding you in. Franny sinks inch by inch, silent but shuddering, until her ass rests flush against your pelvis and you’re buried completely inside her tight, fluttering heat. Franny’s bounces are erratic, hips grinding down hard on the downstroke, taking you to the hilt every time. Her small breasts bounce faintly.
<<dialogue "img/character/franny/frannysexavatar7.jpg" "Franny" "Nnnh… ahh… mmmph…">>
Marina’s fingers find Franny’s clit and rubbing in tight, firm circles, slick with Franny’s arousal.
<<dialogue "img/character/marina/marinasexavatar7.jpg" "Marina" "Cum on his cock… squirt for us, darling">>
Franny comes hard. A hot, forceful gush erupts around your cock, clear liquid squirting in rhythmic pulses, soaking your shaft, your balls. Each squirt coincides with a hard bounce, Marina’s fingers never stopping, drawing out wave after wave. Franny shakes violently, ass trembling against your hips.
@@.option-button;[[Change position|GoodEndingBundle4.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Marina and Franny kneel side by side on the warm white sand, knees pressed close together, faces tilted up toward you in perfect unison. They’re both breathing hard, eyes wide and locked on your cock as you stand over them, stroking yourself slowly.
<<dialogue "img/character/marina/marinasexavatar8.jpg" "Marina" "Please… give it to us">>
<<dialogue "img/character/franny/frannysexavatar8.jpg" "Franny" "Mmm… mmmph…">>
You stroke faster, the pressure building to an unbearable peak.
<<dialogue $playerAvatar "You" "Argh!">>
<img src="img/character/marina/marinafrannysex8.webp" width=100%>
You groan low, hips jerking forward as the hot, heavy, thick cum erupts. It lashes across Marina’s cheek and her mouth. The second pulse hits Franny square across the bridge of her nose and lips, a fat pearly line that clings and drips slowly down her chin. You keep coming—pulse after pulse—aiming carefully so both get covered.
<<dialogue "img/character/franny/frannysexavatar9.jpg" "Franny" "Mmm… mmmph…">>
<<dialogue "img/character/marina/marinasexavatar1.jpg" "Marina" "Mmm… that’s right, Franny… it tastes so damn good…">>
Marina and Franny kneel close on the sand, faces already streaked with your thick cum. They turn to each other without a word. Marina cups Franny’s cheek and licks a long, slow stripe up her jaw, gathering a heavy rope before sucking it clean. Franny leans in, tongue flicking delicately over Marina’s chin, lapping up the dripping strands. Their mouths meet—open, messy kisses, tongues sliding together to share the warm, salty load. Every so often, they reach for your cock again, milking you for every last fucking drop.
<<dialogue "img/character/marina/marinasexavatar2.jpg" "Marina" "God… the taste of your cum is turning me on so much. I need you to fuck me more">>
<<dialogue $playerAvatar "You" "Alright… what about you, Franny?">>
Franny grinds her cunt against your thigh in response, the delicious friction pulling soft moans from her lips
<<dialogue $playerAvatar "You" "I'm in paradise">>
@@.option-button;[[END|GoodEndingBundle4.9]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if !$MarinaFrannySexScene1>>
<<set $MarinaFrannySexScene1 = 1>>
<<set $Chapter1GoodEnding2 = 1>>
<<goto "Chapter1Endings">>
<<elseif $MarinaFrannySexScene1 == 1>>
<<goto "CharactersAndActresses">>
<</if>>
<img src="img/various/dead1.png" width=100%>
Chapter 1 Bad Ending: Killed by Jack McMahon.
<<button "Restart Game">>
<<run UI.restart()>>
<</button>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">True Ending – Chapter 1 Epilogue</div>
Congratulations, you've unlocked the True Ending of Chapter 1!
It's been exactly one year since I released the Bason Prologue. Thank you so much for sticking with the story all the way here.
I started making this game because I love playing adult games and I love watching movies and TV series, and I couldn’t find any show more suitable to turn into a porn game than Banshee. The first season is basically softcore porn. It's a shame they toned things down so much in later seasons.
<div class="styled-line"></div>
Things I haven’t been able to do in this chapter:
Branching storylines are something I haven’t had the chance to add yet, mainly because doing so before finalizing the game’s style and features would likely cause a lot of bugs later on.
I don’t have much experience in making use of stats. You can clearly see that while playing the game, since you don’t really need to pay much attention to stats like Reputation, Energy, or Morality. I might need your advice on this.
About the sex scenes, I think they turned out pretty well, but that’s just me. If you don’t enjoy them, then there’s no point, which is why I’d love to hear your feedback before I start Chapter 2.
Speaking of Chapter 2, for now I can’t share much about it besides the map expansion. Yes, I’ll be doubling the size of Bason.
<<nobr>><img src="img/map/custommap/chapter1truemap.png" width="100%" style="cursor: pointer;" onclick="openLightbox('img/map/custommap/chapter1truemap.png')">
<div id="lightbox" onclick="closeLightbox()">
<img id="lightbox-img" src="">
</div><</nobr>>
<div class="styled-line"></div>
It's just a WIP map for now, so stay tune!
.
.
.
Wait… you’re still here. What are you waiting for? Go back to your world. More endings are still waiting for you.
@@.option-button;<<link "END">><<goto $prevPassage>><</link>>@@
<<set $Chapter1 = 0>>
<<set $Chapter2 = 1>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Continue with Maria guide")>>
<<run updateGuideTextForStoryline("Maria", "Check the Church Restricted Area")>><img src="img/character/marina/marinapregnant.webp" width=100%>
Good Ending 2: Marina got pregnant with your child. You two live happily ever after. No one ever finds you.
<<button "Restart Game">>
<<run UI.restart()>>
<</button>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/various/paradisebeach.png" width=100%>
Good Ending 3: You claimed not one, but two women who love you utterly and completely. The island granted you boundless freedom, endless pleasure, and a future drenched in love and lust. No one ever found you.
<<button "Restart Game">>
<<run UI.restart()>>
<</button>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/paradisebeach.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The receptionist finishes typing, then looks up at you with a small, polite smile.
<<dialogue "img/character/others/hotelreceptionist.png" "Receptionist" "Thank you for waiting, sir">>
<<dialogue $playerAvatar "You" "Okay">>
<<dialogue "img/character/others/hotelreceptionist.png" "Receptionist" "You’ll be in Room 417, on the fourth floor. The elevators are just to your left">>
She reaches for a keycard, slips it into a sleeve, and slides it across the counter toward you.
<<dialogue "img/character/others/hotelreceptionist.png" "Receptionist" "We hope you have a very pleasant stay with us">>
@@.option-button;[[Leave|HotelInside]]@@
<<run hideSidebar()>>
<<set $tempdate to setup.changeDate($now, "days", 1)>><<set $DeluxeRoomBookedTime to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 12, 0)>>
<<run setup.showNotification("❗Check-out time: " + formatGameDateTime($DeluxeRoomBookedTime))>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The receptionist finishes typing, then looks up at you with a small, polite smile.
<<dialogue "img/character/others/hotelreceptionist.png" "Receptionist" "Thank you for waiting, sir">>
<<dialogue $playerAvatar "You" "Okay">>
<<dialogue "img/character/others/hotelreceptionist.png" "Receptionist" "You’ll be in Room 1001, on the tenth floor. The elevators are just to your left">>
She reaches for a keycard, slips it into a sleeve, and slides it across the counter toward you.
<<dialogue "img/character/others/hotelreceptionist.png" "Receptionist" "We hope you have a very pleasant stay with us">>
@@.option-button;[[Leave|HotelInside]]@@
<<run hideSidebar()>>
<<set $tempdate to setup.changeDate($now, "days", 1)>><<set $JuniorSuiteBookedTime to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 12, 0)>>
<<run setup.showNotification("❗Check-out time: " + formatGameDateTime($JuniorSuiteBookedTime))>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The receptionist finishes typing, then looks up at you with a small, polite smile.
<<dialogue "img/character/others/hotelreceptionist.png" "Receptionist" "Thank you for waiting, sir">>
<<dialogue $playerAvatar "You" "Okay">>
<<dialogue "img/character/others/hotelreceptionist.png" "Receptionist" "You’ll be in Room 1305, on the thirteenth floor. The elevators are just to your left">>
She reaches for a keycard, slips it into a sleeve, and slides it across the counter toward you.
<<dialogue "img/character/others/hotelreceptionist.png" "Receptionist" "We hope you have a very pleasant stay with us">>
@@.option-button;[[Leave|HotelInside]]@@
<<run hideSidebar()>>
<<set $tempdate to setup.changeDate($now, "days", 1)>><<set $PremiumSuiteBookedTime to new Date($tempdate.getFullYear(), $tempdate.getMonth(), $tempdate.getDate(), 12, 0)>>
<<run setup.showNotification("❗Check-out time: " + formatGameDateTime($PremiumSuiteBookedTime))>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/hotelinside.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 4</div>
<<setPassageVariableNoMap>>
<<nobr>><<if $MCMoney >= 200>>
@@.option-button;<<link "Order escort service - $200">><<set $MCMoney -= 200>><<goto "DeluxeRoomSexService">><</link>>@@
<<else>>
@@.option-button-disabled;Order escort service - $200@@<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<<if $OliviaComplaint1Count >= 3 and $OliviaComplaint1 == 1>>
<<audio "DoorKnocking" play>>
<<run setup.showNotification("❗Someone’s knocking on the door")>>
<td>
<<button [img[img/location/hotel/tier1floor.png][OliviaFirstMeet1]]>><</button>>
<div class="location-name"><b>Open the door</b></div>
</td>
<<else>>
<td>
<<button [img[img/location/hotel/tier1floor.png][Fourth Floor]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
<</if>>
</tr>
</table><</nobr>>
<<if $DeluxeRoomBookedTime < $now>><<goto "HotelInside">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1room.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 13</div>
<<setPassageVariableNoMap>>
@@.option-button-disabled;COMING SOON@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hotel/tier3floor.png][Thirteenth Floor]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if $PremiumSuiteBookedTime < $now>><<goto "HotelInside">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier3room.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 10</div>
<<setPassageVariableNoMap>>
@@.option-button-disabled;COMING SOON@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hotel/tier2floor.png][Tenth Floor]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if $JuniorSuiteBookedTime < $now>><<goto "HotelInside">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier2room.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<nobr>><<set $DeluxeRoomSexServiceChance = Math.floor(Math.random() * 100)>>
<<if $DeluxeRoomSexServiceChance <= 20>>
<img src="img/various/deluxeroomsexservice1.webp" width=100% style="display: block; margin: 0 auto;">
<<elseif $DeluxeRoomSexServiceChance > 80>>
<img src="img/various/deluxeroomsexservice2.webp" width=70% style="display: block; margin: 0 auto;">
<<elseif $DeluxeRoomSexServiceChance > 20 && $DeluxeRoomSexServiceChance <=40 >>
<img src="img/various/deluxeroomsexservice3.webp" width=50% style="display: block; margin: 0 auto;">
<<elseif $DeluxeRoomSexServiceChance > 40 && $DeluxeRoomSexServiceChance <=60 >>
<img src="img/various/deluxeroomsexservice4.webp" width=100%>
<<elseif $DeluxeRoomSexServiceChance > 60 && $DeluxeRoomSexServiceChance <=80 >>
<img src="img/various/deluxeroomsexservice5.webp" width=70% style="display: block; margin: 0 auto;">
<</if>><</nobr>>
You fuck the escort brains out until you're convinced your money was well spent. Let’s just hope the hotel walls are soundproof—you really don’t want to deal with a noise complaint
@@.option-button;[[End|HotelRoom417]] @@
<<set $OliviaComplaint1Count += 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1room.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Standing outside is a beautiful black woman in her mid-20s, she has curly hair spilling past her shoulders, honey-brown skin, wearing a black bodycon mini dress that barely covers her ass. She’s barefoot, arms crossed under her perky breasts, brown eyes narrowed in pure irritation.
<img src="img/character/olivia/oliviacomplaint.webp" width=100%>
<<dialogue "img/character/olivia/oliviaavatar.jpg" "???" "Yo">>
<<dialogue $playerAvatar "You" "Hey">>
<<dialogue "img/character/olivia/oliviaavatar.jpg" "???" "You done fucking like it’s the end of the world? Some of us are trying to rest">>
<<dialogue $playerAvatar "You" "I'm sorry… I definitely overestimated how soundproof this hotel is. I'm $PlayerInput">>
<<dialogue "img/character/olivia/oliviaavatar.jpg" "Olivia" "Well, at least you're not a complete asshole. I'm Olivia from 418. If you're planning to stay in this hotel as long as I am, then so help me God…">>
<<dialogue $playerAvatar "You" "I'm really sorry about the noise. It won't happen again tonight. If it does, I'll make sure to keep it down">>
<<dialogue "img/character/olivia/oliviaavatar.jpg" "Olivia" "Fair enough… bye then">>
@@.option-button;[[Close the door|HotelRoom417]]@@
<<run hideSidebar()>>
<<set $OliviaComplaint1 = 0>>
<<set $OliviaRoom418 = 1>>
<<set $OliviaMasturbate1 = 1>>
<<set $now to setup.changeDate($now, 'minutes', 30)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1room.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run setup.showNotification("💋New Character Unlocked: Olivia!")>>
<<run updateGuideTextForStoryline("Olivia", "Break into Olivia's room")>><img src="img/character/olivia/olivia0.jpg" width=50% style="display: block; margin: 0 auto;">
Full Name: Olivia Pope
Actress's name: Scarlit Scandal
Age: 26
Height: 5'1" (154 cm)
Weight: 99 lbs (45 kg)
Build: 81-61-86 cm (32-24-34), petite and slim, light on her feet with a traveler’s ease
Eye Color: Brown – curious, observant, always taking in her surroundings
Hair: Brown, worn naturally, often changing styles during her stay
Scars/Tattoos: Tattoos on the inside of her left forearm and on her left hand
Piercings: Nipples; both nostrils
Character Overview
Origin: Born in West Palm Beach, Florida
Occupation: Tourist
Current Status: Visiting Bason for a long stay; currently residing in hotel room 418
<<nobr>>
<table class="gallery-table">
<tr>
<td>
<<if $OliviaSexScene1 is 1>>
<<button [img[img/character/olivia/oliviamasturbate1.webp][OliviaMasturbate1]]>><</button>>
<<else>>
<div class="locked-image">
[img[img/character/olivia/oliviamasturbate1.webp]]
</div>
<</if>>
<b>Olivia Masturbation 1</b>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<</nobr>>
@@.option-button;[[Go back|CharactersAndActresses]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner4.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Room 418</div>
<<setPassageVariableNoMap>>
<<nobr>>
@@.option-button;<<link "Knock">><<goto "OliviaDoorTalk">><</link>>@@
<<if $inventory["Lock Pick"]>>
@@.option-button;<<link "Break in">><<goto "HotelRoom418">><</link>>@@
<<else>>
@@.option-button-disabled;Break in@@<</if>>
@@.option-button;<<link "Leave">><<goto "Fourth Floor">><</link>>@@
<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Room 418</div>
<img src="img/character/olivia/olivia0.jpg" width=50% style="display: block; margin: 0 auto;">
<<setPassageVariableNoMap>>
<<dialogue "img/character/olivia/oliviaavatar.jpg" "Olivia" "What do you want?">>
<<nobr>>@@.option-button;<<link "Leave">><<goto "Fourth Floor">><</link>>@@<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1floor.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Floor 4</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hotel/tier1bathroom.png][418Bathroom]]>><</button>>
<div class="location-name"><b>Bathroom</b></div>
</td>
<td>
<<button [img[img/location/hotel/tier1floor.png][Fourth Floor]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1room.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Room 418</div>
<<setPassageVariableNoMap>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/hotel/tier1room.png][HotelRoom418]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<if $OliviaMasturbate1 == 1>><<goto "OliviaMasturbate1">><</if>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1bathroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/olivia/oliviamasturbate1.webp" width=100%>
You raise your phone, switch to camera mode, and snap several quick photos—close enough to capture the way her slick pussy stretches around the toy, the shine of her arousal dripping down the shaft, her flushed face lost in pleasure.
<<dialogue "img/character/olivia/oliviasexavatar1.jpg" "Olivia" "Nnngh! Yes—yes—I'm cumming… oh fuck, cumming on it!">>
She freezes mid-squat, thighs quaking, a sharp cry ripping from her throat as her pussy clenches visibly around the toy. A hot gush of wetness spills down the shaft, dripping onto the porcelain below.
@@.option-button;[[Take a picture|OliviaMasturbate1.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1bathroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/olivia/oliviamasturbate0.webp" width=100%>
Olivia is squatting over the edge of the bathtub, petite ebony body glistening with leftover water droplets. Between her spread thighs, a thick dildo is suctioned to the tub rim. She’s lowered herself onto it slowly, inch by inch, until half the length disappears inside her slick pussy.
<<dialogue "img/character/olivia/oliviasexavatar1.jpg" "Olivia" "Ahhh… mmmph… yes… fuck…">>
Her thighs tremble as she picks up speed, taking more of the dildo with each descent until her ass nearly brushes the tub rim. One hand braces on the wall for balance; the other reaches down to rub frantic circles over her swollen clit.
<<dialogue "img/character/olivia/oliviasexavatar4.jpg" "Olivia" "Ahhn! Ahhn! Right there…">>
@@.option-button;[[Leave|OliviaMasturbate1.2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hotel/tier1bathroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.6) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if !$OliviaSexScene1>>
<<set $OliviaMasturbate1 = 0>>
<<set $OliviaSexScene1 = 1>>
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<run updateGuideTextForStoryline("Olivia", "You have reached the end of this update")>>
<<goto "HotelRoom418">>
<<elseif $OliviaSexScene1 == 1>>
<<goto "Olivia Hint">>
<</if>><img src="img/character/franny/frannyfacefuck.webp" width=100%>
You slide your hand to the back of Franny’s head, fingers threading gently but firmly through her dark hair. You tighten your grip then start fucking her mouth. Her mouth is warm, wet, soft; she relaxes her throat instantly, letting you push deeper.
<<dialogue "img/character/franny/frannysexavatar8.jpg" "Franny" "Gluk… gluk… gluk…">>
You hold her head and pick up speed, fucking her mouth with longer, deeper strokes. Her throat flutters around the head each time you bottom out
<<dialogue "img/character/franny/frannysexavatar6.jpg" "Franny" "Gllluuuk… hhlk… gluuuk…">>
The pressure builds fast, unstoppable. Your hips jerk forward one last time, burying yourself to the hilt. Hot, heavy spurts that fill her cheeks faster than she can swallow. Cum overflows at the corners of her lips, creamy white trails sliding down her chin in slow, sticky rivulets.
@@.option-button;[[Leave|FrannyAtWineStorage]]@@
<<set $moral -= 5>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bar/winestorage.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>The room is cold. Dust hangs heavy in the air, motes dancing in slivers of stained glass moonlight. At the center of the chamber stands the sculpture.
Set into the floor, the stone mechanism is circular and ancient-looking. Seven circular emblems are set into the slab, arranged with deliberate symmetry, each one etched deeper than the last.
You glance around the chamber. Nothing else down here. Just the sculpture. Maybe you can find a way to activate it.
<<if $inventory["Stone Disk"]>>As you approach the sculpture, the stone disk in your pocket vibrates.<</if>>
@@.option-button;[[Leave|Church Restricted Area]]@@
<<run hideSidebar()>>
<<set $CircleOfSins1 = 0>>
<<set $CircleOfSins2 = 1>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/circleofsins.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Maria", "Explore the map. There may be treasure hidden there")>>You take a slow breath and reach into your pocket.
The stone disk rests heavy in your palm. You don’t know why you kept it. You only know you never threw it away.
You step closer. For a moment, nothing happens. Then you place the disk against the circular emblems until you find the one that fits.
The sculpture shudders. Not a subtle tremor. It’s a violent, grinding movement—stone screaming against stone as dust rains from the ceiling. The pedestal groans, the emblems vibrating as if something deep inside has been struck awake.
<<dialogue $playerAvatar "You" "What the—fuck?">>
Amid the chaos, you see Maria and some other nuns burst through the doorway. Their faces drain of color the instant they see the sculpture in motion. One of them whispers a prayer.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "What have you done?">>
<<dialogue $playerAvatar "You" "What? I—">>
Before you can answer, the stone disk sinks inward—not falling, not sliding, but melding. The seam vanishes as if it was never there. The shaking stops
The chamber falls silent again, dust settling slowly through the beam of light from above. Then the emblem glows. The nuns don’t move. None of them breathe.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Lord Jesus Christ, Son of God, have mercy on us sinners… we have broken what we cannot mend">>
<<dialogue "img/character/others/nun1.png" "Nun 1" "O God of all compassion, the sky is falling because of our hands">>
<<dialogue "img/character/others/nun2.png" "Nun 2" "Forgive what we have done in blindness; save what still can be saved">>
<<dialogue $playerAvatar "You" "Okay, now you’re scaring me">>
@@.option-button;[[Calm down|CircleOfSins3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/circleofsins.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<style>
@keyframes earthquake {
/* Shake for first 2 seconds */
0% { transform: translate(0, 0); }
1% { transform: translate(-2px, 1px); }
2% { transform: translate(2px, -1px); }
3% { transform: translate(-1px, 2px); }
4% { transform: translate(1px, -2px); }
5% { transform: translate(-2px, 1px); }
6% { transform: translate(2px, -1px); }
7% { transform: translate(-1px, 2px); }
8% { transform: translate(1px, -1px); }
9% { transform: translate(-2px, 1px); }
10% { transform: translate(1px, -2px); }
11% { transform: translate(-1px, 1px); }
12% { transform: translate(2px, -1px); }
13% { transform: translate(-2px, 2px); }
14% { transform: translate(1px, -1px); }
15% { transform: translate(-1px, 1px); }
16% { transform: translate(0, 0); }
/* Stable for 10 seconds (16% to 100% is stable) */
17%, 100% { transform: translate(0, 0); }
}
.passage {
animation: earthquake 5s ease-in-out infinite !important;
}
</style>The nuns slowly regain their composure. One of them makes the sign of the cross. Another brushes dust from her sleeve with trembling fingers.
Maria leans in toward the others, her voice dropping to a whisper. You catch fragments of what she’s saying, but the rest is lost beneath the echoing chamber. The other nuns listen closely, nodding, their expressions grave.
After a moment, Marina straightens and turns to you.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "You, come with me">>
She gestures toward a narrow side passage leading away from the chamber
<<dialogue $playerAvatar "You" "What just happened?">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "We need to talk. In private">>
Maria turns to face the nuns.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Leave us">>
The nuns exchange quick glances. One opens her mouth as if to protest, then thinks better of it. They bow their heads slightly and back out of the room, closing the door softly behind them.
<<dialogue $playerAvatar "You" "Okay, now can you tell me what the hell just happened?">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Why did you break into our sacred place? That’s not something a sheriff would do, don’t you think?">>
<<dialogue $playerAvatar "You" "You think I wouldn’t remember our last tea break?">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" ". . .">>
<<dialogue $playerAvatar "You" "Yeah. I remember it. The dream. I don’t care what kind of fanatics you people are. I came here to find out why you did it to me">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "My dear, though I may not reveal the reasons behind what was done, let this be my solemn pledge, in the presence of heaven, that you shall suffer no consequences from it">>
<<dialogue $playerAvatar "You" "You nuns are surely discreet, aren’t you?">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" ". . .">>
<<dialogue $playerAvatar "You" "Can you at least tell me what just happened in there?">>
@@.option-button;[[Wait|CircleOfSins4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/mariaroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Marina closes her eyes and exhales, a long, weary sigh that seems to carry years with it.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Fine, I will share with you only what the Lord permits my lips to speak...This will take a while. Would you like some tea?">><span id="choices">
@@.option-button;[[Sure|CircleOfSins4.1]]@@
@@.option-button;<<link "Nah">>
<<replace "#choices">><</replace>>
<<append "#extra-text">>
<<dialogue $playerAvatar "You" "No, thanks">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Very well, then. There’s no hiding from this anyway. Long before temples had names, there was a demon, one of the Old Ones. A being not born of Hell, but present before Hell was given form. In the oldest apocrypha, it is called Asmodeus">>
The candle on the table flickers.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "For God knows how long it roamed the earth, and wherever it passed, civilizations collapsed. Cities fell without siege. It did not conquer them—it unmade them">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Until it was caged. Bound within Septem Vincula by a man named Eddard Donovan">>
<<dialogue $playerAvatar "You" "Father Donovan?">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Yes, his ancestor. The Donovans have served as the protectors of Septem Vincula for centuries. The sculpture you saw is the Septem Vincula. The Seven Bonds to suppress Asmodeus’s seven limbs">>
<<dialogue $playerAvatar "You" "So I just loosened one of its limbs?">>
Maria just gives you a gentle nod
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Where did you get that artifact and how did you know it would fit into the Septem Vincula in the first place?">>
<<dialogue $playerAvatar "You" "I just found it in the woods, near the river, when I was working on Rebecca’s case. The stone disk started to vibrate when I got close to the thing—the—">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "The Septem Vincula. Interesting">>
<<dialogue $playerAvatar "You" "So… are we fucked?">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "Language!">>
<<dialogue $playerAvatar "You" "Forgive me, Sister">>
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "No, not yet. It is still under our control. As for you, you must stay away from the Septem Vincula. Do not return to the chamber. Do not seek the other artifact. Do not try to understand more than you already do">>
You open your mouth to argue. She cuts you off gently, but without mercy.
<<dialogue "img/character/maria/mariaavatar.png" "Maria" "This is not a request. For your sake, and for everyone else’s—leave">>
@@.option-button;[[Leave|CircleOfSins5]]@@
<</append>>
<</link>>@@
</span>
<span id="extra-text"></span>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/church/mariaroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You wake up face down in a patch of dry grass, the sky above a washed-out gray. The late morning sun presses down like a weight, making the pounding in your skull feel even worse. You push yourself up, groaning, hands sinking into dirt and weeds. There’s a metallic taste in your mouth, and the back of your neck stings like someone jabbed you with a needle.
You glance around—open field, on the edge of town, not far from the train tracks.
Your jacket’s still on, badge still in your pocket, but your belt feels lighter. No gun. No phone.
You squint toward the skyline of Bason. Not far. You can walk.
As you move, your mind churns—how the hell did you get here?
You try to piece it together. But… nothing. Not a single clue of what happened.
@@.option-button;[[Leave|CircleOfSins5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/westside/randomarea1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/evelyn/evelynmissionary1.webp" width=100%>
You thrust in one deep stroke, burying yourself completely. Evelyn’s back arches off the table, a sharp, lustful cry tearing from her throat. Her pussy grips you like a fist, wet and scorching, fluttering with every plunge. You lean down, mouth closing over one stiff nipple, sucking hard while you pound into her relentlessly.
<<dialogue "img/character/evelyn/evelynsexavatar1.jpg" "Evelyn" "Ahh… ahh… harder">>
Evelyn’s head snaps back, a raw cry ripping from her throat.
<<dialogue "img/character/evelyn/evelynsexavatar2.jpg" "Evelyn" "Nnngh! Nnngh! Right there">>
You pound relentlessly, hips snapping fast and deep, cock dragging along her front wall on every stroke.
<<nobr>>@@.option-button;[[Cowgirl|DoctorVisit2.3]]@@
@@.option-button;[[Reverse Cowgirl|DoctorVisit2.5]]@@
@@.option-button;[[Cum|DoctorVisit2.6]]@@
<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/patientroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/evelyn/evelyncowgirl1.webp" width=100%>
Evelyn pushes you down onto the exam chair. She straddles your hips and grips your cock, lines it up with her soaked entrance, and sinks down in one slow, deliberate motion. A low, throaty moan spills from her lips as you fill her completely. She starts riding you in cowgirl gently.
<<dialogue "img/character/evelyn/evelynsexavatar3.jpg" "Evelyn" "God… It's so thick">>
Her full breasts sway with the rhythm, nipples brushing your shirt on every downstroke while her ass bouncing against your thighs.
<<dialogue "img/character/evelyn/evelynsexavatar4.jpg" "Evelyn" "Ahh… yes… just like that…">>
<<nobr>>@@.option-button;[[Faster|DoctorVisit2.4]]@@
@@.option-button;[[Missionary|DoctorVisit2.2]]@@
@@.option-button;[[Reverse Cowgirl|DoctorVisit2.5]]@@
@@.option-button;[[Cum|DoctorVisit2.6]]@@
<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/patientroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/evelyn/evelynreversecowgirl1.webp" width=100%>
Evelyn slides off you with a shaky breath, her thighs trembling from the last orgasm. She turns around without a word and reaches back, guides your cock to her entrance, and sinks down hard in one smooth drop. A long, throaty moan spills from her lips as you fill her completely again.
<<dialogue "img/character/evelyn/evelynsexavatar7.jpg" "Evelyn" "Ooh… yes… deeper like this…">>
She rides you frantically, hips snapping down faster. Her pussy clenches tight around you on every upstroke, dripping down your shaft, soaking your thighs and the padded surface below.
<<dialogue "img/character/evelyn/evelynsexavatar1.jpg" "Evelyn" "Nnngh—yes... fuck me like this">>
Her breasts jolt and ripple with every violent descent, sweat glistening on her skin, moans turning raw and desperate.
<<nobr>>
@@.option-button;[[Missionary|DoctorVisit2.2]]@@
@@.option-button;[[Cowgirl|DoctorVisit2.3]]@@
@@.option-button;[[Cum|DoctorVisit2.6]]@@
<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/patientroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>You feel the tension coil tight, hips stuttering as Evelyn slams down on your cock one more time. Her ass ripples against your thighs, pussy clenching hard around you.
<<dialogue $playerAvatar "You" "Fuck—Evelyn, I’m gonna come">>
<<dialogue "img/character/evelyn/evelynsexavatar7.jpg" "Evelyn" "No, no... don’t pull out. Cum as deep as possible... Only pull out when I say so">>
She grinds down deliberately, circling her hips so your cock presses right against her cervix, walls fluttering greedily. You thrust up hard once, twice, and let go with a guttural groan. Thick, hot ropes surge straight into her, flooding her core in heavy pulses. Evelyn moans long and low, head falling forward as she feels it.
<img src="img/character/evelyn/evelyncum1.webp" width=100%>
<<dialogue "img/character/evelyn/evelynsexavatar5.jpg" "Evelyn" "Ooh god… I can feel you inflating my womb... God it so full…">>
Evelyn stays impaled, trembling through the aftershocks, your cock stays rock-hard inside, still twitching and leaking the last drops into her while plugging every drop so nothing can leak out.
<<nobr>><span id="choices">
@@.option-button;<<link "X-ray">>
<<replace "#choices">><</replace>>
<<append "#extra-text">>
<img src="img/various/filledup.webp" width=50% style="display: block; margin: 0 auto;">
<</append>>
<</link>>@@
</span>
<span id="extra-text"></span><</nobr>>
@@.option-button;[[Wait|DoctorVisit2.7]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/patientroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/evelyn/evelyncowgirl1faster.webp" width=100%>
Evelyn plants her hands firmly on your chest, nails digging in through your skin as she lifts her hips high before slamming her ass down hard onto your cock with a loud, wet slap. The force makes the exam chair creak beneath you.
<<dialogue "img/character/evelyn/evelynsexavatar5.jpg" "Evelyn" "Ahh! Fuck! Ahh! Fuck">>
She rides you relentlessly with her full breasts bouncing wildly. She grinds her clit against your pelvis on the next drop, shuddering hard as pleasure spikes through her.
<<dialogue "img/character/evelyn/evelynsexavatar6.jpg" "Evelyn" "I’m cumming again">>
She slams down one final time and freezes. You can feel her womb spasming violently around your cock
<<nobr>>@@.option-button;[[Missionary|DoctorVisit2.2]]@@
@@.option-button;[[Reverse Cowgirl|DoctorVisit2.5]]@@
@@.option-button;[[Cum|DoctorVisit2.6]]@@
<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/patientroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>Evelyn stays straddling you for a long moment after you finish, her pussy still fluttering around your softening cock, keeping every drop trapped inside. She reaches over to the drawer beside the exam table, pulling out a roll of wide medical duct tape.
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "Okay… on three, gently pull out—and I’ll tape my pussy shut right after, keeping it all locked in">>
<<dialogue $playerAvatar "You" "Okay">>
Your cock slides gently out of Evelyn’s cunt, the slow friction dragging her into one final, shuddering orgasm. She tears off a long strip with her teeth, then presses it firmly over her swollen, cum-filled pussy. The tape seals her lips tight, trapping your load deep inside. She smooths it down carefully, making sure no gaps remain.
<<dialogue "img/character/evelyn/evelynsexavatar4.jpg" "Evelyn" "nnngh—nnngh—">>
<img src="img/character/evelyn/evelyntaped.webp" style="display: block; margin: 0 auto;">
<<dialogue "img/character/evelyn/evelynavatar.jpg" "Evelyn" "There, sealed in. Every last bit">>
She slides off the table, legs shaky, and quickly pulls her skirt down, buttons her blouse, and shrugs her white coat back on. Hher lower belly bulges noticeably, rounded and taut from the cum you pumped into her.
<<dialogue $playerAvatar "You" "Evelyn, you look—">>
<<dialogue "img/character/evelyn/evelynsexavatar7.jpg" "Evelyn" "Pregnant. I look pregnant. All that cum sloshing around in there… fuck, it’s making me so... I need to run to my office ASAP. We’ll talk again soon">>
With that, she smooths her coat one last time, trying and failing to hide the obvious bulge then hurries out, heels clicking down the hallway.
@@.option-button;[[Leave|DoctorVisit2.8]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/hospital/patientroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<if !$EvelynSexScene3>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $EvelynSexScene3 = 1>>
<<set $EvelynTalk3 = 0>>
<<run addWallpaper("img/character/evelyn/evelynwallpaper2.jpg")>>
<<run setup.showNotification("📸New Wallpaper Unlocked!")>>
<<run updateGuideTextForStoryline("Evelyn", "You have reached the end of this update")>>
<<goto "Hospital">>
<<elseif $EvelynSexScene3 == 1>>
<<goto "Evelyn Hint">>
<</if>>
After taking care of Franny for a while, it becomes obvious she can’t keep staying in your place forever. She needs somewhere stable. So you go to Cassie.
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "Sheriff! It's been a while since you came">>
<<dialogue $playerAvatar "You" "Glad to see you too, Cassie. Now… you gonna let your Sheriff come inside?">>
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "Of course">>
The bell chimes quietly as you enter. Cassie turns slowly and walks to the kitchen. She’s in loose linen pants and a fitted tank top, hair in a messy bun
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "Sit. You want coffee? I just made a pot">>
<<dialogue $playerAvatar "You" "I’m good. Thanks">>
She sits across from you, folding her hands in her lap, waiting. You lean forward, elbows on your knees.
<<dialogue $playerAvatar "You" "There’s a girl. Franny. I found her during a case recently. She was locked in the basement of that abandoned house on North Ridge Road. She’s been mute ever since I got her out. Doctors say she’s physically okay. ">>
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" ". . .">>
<<dialogue $playerAvatar "You" "She’s got nowhere else to go, I can't find her on the system either. She’s been crashing with me for a while now, but I’ve been slammed lately and can’t give her the attention she needs. I was thinking… maybe you could take her in for a bit? I’ll cover whatever it costs">>
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "How old is she?">>
<<dialogue $playerAvatar "You" "About Rebecca’s age">>
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "Poor thing">>
<<dialogue $playerAvatar "You" ". . .">>
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "Let me meet her. If she feels safe here, I’ll take her in">>
<<dialogue $playerAvatar "You" "Thank you, Cassie. I’ll pay her rent while she’s here. I figure she can lend you a hand with the chores and stuff">>
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "I don’t need your money... But I do want you to lie on that table naked—">>
<<dialogue $playerAvatar "You" "Sure">>
@@.option-button;[[Enjoy|CassieTalk1.1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage2.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<dialogue "img/character/cassie/cassiesexavatar1.jpg" "Cassie" "Been too long... Lie down. Let me remind you how good this feels">>
She guides you to the large the padded massage table. You strip and lie face-down, the soft sheet already slightly warm beneath you.
<<dialogue "img/character/cassie/cassiesexavatar2.jpg" "Cassie" "Mmm… let me rub in a little of my premium oil. You’re going to feel every drop">>
She reaches for the bottle of thick, clear Nuru gel. She pours a generous stream directly onto her own naked body, starting at her collarbone. The gel runs in slow, shiny rivers over her breasts, down her stomach, pooling at her navel before dripping lower over her thighs.
<img src="img/character/cassie/cassieoiledup.webp" width=100%>
<<dialogue "img/character/cassie/cassiesexavatar3.jpg" "Cassie" "Mmm… I’m way too slippery right now. Think you can handle me sliding all over you?">>
<<dialogue $playerAvatar "You" "I'll take my chances">>
Cassie just smiles climbs onto you, straddling your lower back. She lowers herself slowly, pressing her oiled breasts flat against your shoulders.
<img src="img/character/cassie/cassiemassage2.webp" width=100%>
<<dialogue "img/character/cassie/cassiesexavatar4.jpg" "Cassie" "Fuck… you feel so warm">>
She starts at your neck, gliding up to your hairline, then reverses—sliding all the way to the small of your back. Her nipples trace firm lines along your spine. The gel eliminates all friction, turning every movement into a long, sensual stroke.
<<dialogue "img/character/cassie/cassiesexavatar5.jpg" "Cassie" "Tell me when you want to turn over. I could slide on you like this forever… but I know you’re already aching for what comes next">>
@@.option-button;[[Turn over|CassieTalk1.2]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/cassie/cassiemassage3.webp" width=100%>
You turn over onto your back on the massage table, the warm gel already slick beneath you. Cassie smiles down at you, her body still glistening from the Nuru oil she poured over herself earlier. She straddles your thighs, knees planted wide, and leans forward. Her full, heavy breasts hang just above your cock. She cups them in both hands, pressing them together around your shaft, trapping it in the warm, slippery valley between them.
<<dialogue "img/character/cassie/cassiesexavatar6.jpg" "Cassie" "Mmm… look how eager you are already">>
Your cock throbs, growing rock hard in seconds—veins standing out, tip flushed dark and leaking pre-cum that mixes with the gel, making everything even slicker.
<<dialogue "img/character/cassie/cassiesexavatar7.jpg" "Cassie" "Ahh… feel that? So hard for me already…">>
Cassie cups her breasts, presses them together around your cock. The oil makes everything glide; your shaft disappears between her cleavage, the head peeking out at the top with each gentle squeeze.
<img src="img/character/cassie/cassiemassage4.webp" width=100%>
<<nobr>>@@.option-button;<<link "Zoom">><<showPopup "CassieMassage4Zoom">><</link>>@@<</nobr>>
<<dialogue "img/character/cassie/cassiesexavatar8.jpg" "Cassie" "Let me take care of you">>
She starts to move, sliding her breasts up and down your length in long, wet strokes. The oil squelches softly with every pass, her skin so warm and plush it feels like sinking into something alive. She leans forward more, letting her weight press down, trapping you tighter between her tits. She spits once, letting saliva drip from her lips onto your shaft.
<<dialogue "img/character/cassie/cassiesexavatar9.jpg" "Cassie" "Fuck… you’re so hard">>
@@.option-button;[[Continue|CassieTalk1.3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/cassie/cassiemassage5.webp" width=100%><img src="img/character/cassie/cassiemassage6.webp" width=100%>
Cassie slows her rhythm, her breasts still wrapped snugly around your cock, slick with oil and the remnants of your earlier release. She sits up gradually on your thigh, straddling you without breaking contact. Her hand replaces the press of her tits, fingers curling around your shaft in a slow, deliberate stroke, thumb gliding over the sensitive head with every pass.
<<dialogue "img/character/cassie/cassiesexavatar1.jpg" "Cassie" "Mmm… so, Sheriff… what do you want next?">>
<<dialogue $playerAvatar "You" "God… your tits are so fucking hot. I need to fuck them">>
Cassie cups her oiled breasts from underneath with both hands, lifting and squeezing so they spill over her fingers. Then she starts juggling them playfully, letting them slap together softly with wet smack-smack sounds from the gel.
<<dialogue "img/character/cassie/cassiesexavatar2.jpg" "Cassie" "You want these milkers?">>
<<dialogue $playerAvatar "You" "Yes">>
<<dialogue "img/character/cassie/cassiesexavatar3.jpg" "Cassie" "Mmm… then come get them">>
@@.option-button;[[Take control|CassieTalk1.4]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
You lift Cassie effortlessly and set her on the edge of the massage table, her legs dangling off the side, oiled body gleaming under the low lights. She immediately cups her full, slick breasts and presses them tightly together, creating a perfect, glistening channel right between them.
<<dialogue "img/character/cassie/cassiesexavatar4.jpg" "Cassie" "Yesss... Fuck these titties">>
The first thrust glides in smoothly, wet friction as her oiled breasts envelop you completely. You bottom out between them, the head of your cock emerging at the top of her cleavage before you pull back and thrust again. The oil lets you move fast and deep. Cassie squeezes her breasts harder around you.
<img src="img/character/cassie/cassiemassage7.webp" width=100%>
<<nobr>>@@.option-button;<<link "Zoom">><<showPopup "CassieMassage7Zoom">><</link>>@@<</nobr>>
<<dialogue "img/character/cassie/cassiesexavatar5.jpg" "Cassie" "Mmm… yes… fuck my tits">>
You thrust between Cassie's slick, oiled breasts faster now, the gel letting you glide in and out with perfect, slippery ease. Her full mounds squeeze tight around your shaft, bouncing with every stroke, nipples hard and dragging along your skin.
@@.option-button;[[Tell Cassie you're about to cum|CassieTalk1.5]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<img src="img/character/cassie/cassiemassage8.webp" width=100%><<dialogue $playerAvatar "You" "Fuck… Cassie, I’m gonna come">>
<<dialogue "img/character/cassie/cassiesexavatar6.jpg" "Cassie" "Ahh... Come for me">>
She releases her breasts, letting them fall apart with a soft, wet slap. Your cock springs free, glistening and throbbing. Cassie wraps her hand around you and starts jerking you fast, twisting her wrist on every upstroke, thumb circling the head.
<img src="img/character/cassie/cassiecumontits2.webp" width=100%>
You groan low as the first thick rope erupts, splashing hot across her upper chest and the swell of her breasts. Another pulse hits her cleavage, then her chin and lower lip. She keeps stroking through it, milking every spurt. Cum paints her breasts in heavy white lines, running in slow rivulets down her stomach.
<<dialogue "img/character/cassie/cassiesexavatar7.jpg" "Cassie" "Mmm… so much, look at the mess you made…">>
@@.option-button;[[Stand up|CassieTalk1.6]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage1.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
Cassie eases off you slowly, her breasts still slick with oil and your release, a soft, satisfied sigh escaping her as she sits back on her heels beside the massage table. She reaches out, rests her hand on your knee, thumb brushing a small, soothing circle.
<<dialogue "img/character/cassie/cassieavatar1.jpg" "Cassie" "You don’t have to rush this, bring Franny whenever you feel she’s ready">>
<<dialogue $playerAvatar "You" "Thanks, Cassie">>
@@.option-button;[[Leave|CassieTalk1.7]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/massageparlor/zenmassage2.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<if !$CassieSexScene2>>
<<set $now to setup.changeDate($now, 'hours', 2)>>
<<set $CassieSexScene2 = 1>>
<<set $CassieFrannyTalk = 0>>
<<run addWallpaper("img/character/cassie/cassiewallpaper2.jpg")>>
<<run setup.showNotification("📸New Wallpaper Unlocked!")>>
<<run updateGuideTextForStoryline("Cassie", "You have reached the end of this update")>>
<<goto "Massage Parlor">>
<<elseif $CassieSexScene2 == 1>>
<<goto "Cassie Hint">>
<</if>>
You step behind Riley, close enough that your chest brushes her back. Your hand slides down, palm flattening over one firm cheek, then squeezing hard. Riley sucks in a sharp breath, thighs clenching, but she doesn’t pull away. She leans back into your grip for half a second, just enough to let you feel how much she wants it, then straightens like nothing happened.
You whisper something in her ear then turn and walk toward the storage room at the end of the hall. The door is ajar. You slip inside.
Thirty seconds later Riley follows.
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "Don’t you ever get afraid… people will find out about this?">>
<<dialogue $playerAvatar "You" "You’re just too fucking sexy, Riley. I can’t wait">>
She closes the door behind her with a soft click, flips the deadbolt to lock the door.
<<dialogue "img/character/riley/rileyavatar.jpg" "Riley" "What do you want to do to me?">>
<<nobr>>@@.option-button;[[Blowjob|RileyBSDSex1.1]]@@
@@.option-button;[[Doggy Style|RileyBSDSex1.2]]@@
@@.option-button;[[Missionary|RileyBSDSex1.3]]@@
@@.option-button;[[Cow Girl|RileyBSDSex1.4]]@@
@@.option-button;[[Cum|RileyBSDSex1.5]]@@
@@.option-button;[[Leave|SquadRoom]]@@
<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/squadroom.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/riley/rileyblowjob4.webp" width=100%>
<<nobr>>@@.option-button;<<link "Zoom">><<showPopup "RileyBlowjob4Zoom">><</link>>@@<</nobr>>
Riley doesn’t tease. She wraps her lips around the head immediately, sucking hard, tongue swirling over the slit to taste the first bead of pre-cum. She takes you deeper on the next bob. Her hands grip your thighs for leverage while her head moves faster, lips stretching tight around your shaft.
<<dialogue "img/character/riley/rileysexavatar9.jpg" "Riley" "Gluk… gluk… gluk…">>
@@.option-button;[[Change position|RileyBSDSex1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/evidenceroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/riley/rileydoggysex1.webp" width=100%>
<<nobr>>@@.option-button;<<link "Zoom">><<showPopup "RileyDoggy1Zoom">><</link>>@@<</nobr>>
You start pounding her doggy-style. Riley walls clamp down greedily, slick and hot, pulling you in deeper each time. Her thighs tremble, ass jiggling with every brutal thrust. You reach around with one hand, fingers finding her swollen clit and rubbing fast circles while you keep pounding relentlessly.
<<dialogue "img/character/riley/rileysexavatar2.jpg" "Riley" "Ahh—ahh—Nnngh—">>
@@.option-button;[[Change position|RileyBSDSex1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/evidenceroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/riley/rileymissionary1.webp" width=100%>
You angle your hips sharper, grinding against her clit on every deep stroke. Riley’s moans turn louder, more desperate. Her pussy spasms violently, milking your cock in frantic pulses while she shakes beneath you, biting her lip to muffle the final cry. You keep thrusting through it until her aftershocks fade and she’s left gasping, flushed, and wrecked against the shelf.
<<dialogue "img/character/riley/rileysexavatar3.jpg" "Riley" "Nnngh—yes—fuck, I'm gonna cum">>
@@.option-button;[[Change position|RileyBSDSex1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/evidenceroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/riley/rileycowgirl1.webp" width=100%>
<<nobr>>@@.option-button;<<link "Zoom">><<showPopup "RileyCowGirl1Zoom">><</link>>@@<</nobr>>
Riley starts riding you in cowgirl, rolling her hips in deep, grinding circles that drag your cock along every sensitive spot inside her. Her pussy clenches tight, hot and wet, coating you with fresh slick. She grinds her clit against your pelvis on the downstroke, thighs trembling as she chases the friction. Her breasts bounce under the open shirt, nipples hard and straining. You buck your hips to meet her, driving deeper while she slams down relentlessly. Her walls flutter wildly, clamping tighter with every thrust.
<<dialogue "img/character/riley/rileysexavatar4.jpg" "Riley" "Ahh… mmm… yes—fuck">>
@@.option-button;[[Change position|RileyBSDSex1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/evidenceroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><img src="img/character/riley/rileyblowjob4zoom.webp" width=100%><img src="img/character/riley/rileydoggysex1zoom.webp" width=100%><img src="img/character/riley/rileycowgirl1zoom.webp" width=100%><img src="img/character/riley/rileycuminsideside1.webp" width=100%>
Riley’s thighs clamp tight around your waist as you thrust up into her one last time, burying yourself deep while she rides the aftershocks of her orgasm. You let go with a low growl. Hot, thick cum surge into her, flooding her clenching pussy in heavy pulses. Riley moans loud and broken, rocking her hips to milk you deeper, walls fluttering and squeezing around every spurt like she’s trying to pull it all in.
<<dialogue "img/character/riley/rileysexavatar7.jpg" "Riley" "fuck, fill me u... I feel it… so much">>
@@.option-button;[[Leave|SquadRoom]]@@
<<run hideSidebar()>>
<<set $now to setup.changeDate($now, 'minutes', 45)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/evidenceroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="styled-line"></div>
<<nobr>>
<<if ($MarinaCall1 == 1) && ($now >= $MarinaCall1Time)>>@@.option-button;<<link "Listen">><<goto "MarinaCall1Operator">><</link>>@@<</if>>
<<if $MarinaCall2 == 1>>@@.option-button;<<link "Listen">><<goto "MarinaCall2">><</link>>@@<</if>>
<<if $MarinaCall3 == 1>>@@.option-button;<<link "Call">><<goto "MarinaCall3">><</link>>@@<</if>>
@@.option-button-disabled;Booty Call • Coming soon@@
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@ <</nobr>>
<div class="styled-line"></div>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>COMING SOOM
@@.option-button;<<link "Leave">><<goto $prevPassage>><</link>>@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Choose your profile</div>
<<nobr>><div class="avatar-grid">
<div class="avatar-option" data-avatar="img/avatar/avatar1.png">
[img[img/avatar/avatar1.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar2.png">
[img[img/avatar/avatar2.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar3.png">
[img[img/avatar/avatar3.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar4.png">
[img[img/avatar/avatar4.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar5.png">
[img[img/avatar/avatar5.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar6.png">
[img[img/avatar/avatar6.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar7.png">
[img[img/avatar/avatar7.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar8.png">
[img[img/avatar/avatar8.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar9.png">
[img[img/avatar/avatar9.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar10.png">
[img[img/avatar/avatar10.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar11.png">
[img[img/avatar/avatar11.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar12.png">
[img[img/avatar/avatar12.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar17.png">
[img[img/avatar/avatar17.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar18.png">
[img[img/avatar/avatar18.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar15.png">
[img[img/avatar/avatar15.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar16.png">
[img[img/avatar/avatar16.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar13.png">
[img[img/avatar/avatar13.png]]
</div>
<div class="avatar-option" data-avatar="img/avatar/avatar14.png">
[img[img/avatar/avatar14.png]]
</div>
</div><</nobr>>
<div id="continue-button">@@.option-button;[[Continue|Select Game Mode]]@@</div>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner2.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<style>
.avatar-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
max-width: 600px;
margin: 0 auto;
}
.avatar-option {
cursor: pointer;
transition: all 0.3s;
}
.avatar-option img {
width: 100%;
border: 3px solid rgba(255, 255, 255, 0.2);
border-radius: 10px;
transition: all 0.3s;
}
.avatar-option:hover img {
border-color: rgba(74, 144, 226, 0.8);
transform: scale(1.05);
}
.avatar-option.selected img {
border-color: #4a90e2;
box-shadow: 0 0 20px rgba(74, 144, 226, 0.6);
}
#continue-button {
text-align: center;
margin-top: 30px;
display: none;
}
</style>
<<script>>
$(document).on('click', '.avatar-option', function() {
// Remove selected class from all avatars
$('.avatar-option').removeClass('selected');
// Add selected class to clicked avatar
$(this).addClass('selected');
// Set the variable
State.variables.playerAvatar = $(this).data('avatar');
// Show the continue button
$('#continue-button').show();
});
// On passage load, highlight the previously selected avatar and show button if needed
$(document).one(':passagerender', function() {
if (State.variables.playerAvatar) {
$('.avatar-option[data-avatar="' + State.variables.playerAvatar + '"]').addClass('selected');
$('#continue-button').show();
}
});
<</script>><div class="location-banner">Disclaimers</div>Hello there, I'm DraemGaem, and welcome you to Bason, my first-ever game project.
Welcome to Bason, a sandbox game driven by rich, interactive storytelling. The events of this game take place in the secretive town of Bason, hidden somewhere in the Mountain West. Through a strange chain of events, you have become the town’s new sheriff, and with that authority on your shoulders, the path forward is yours to choose. You can uncover the town’s buried mysteries, build relationships with local baddies, or confront the mistakes from your past that led you to Bason in the first place.
This is an erotic chose your own adventure game. It features many adult and sexual themes that are not suitable to those under the age of 18, such as:
Various sex acts
Rape, incest, netorare, and others
Prostitution, stripping, and other forms of sex work
Drug and alcohol use and abuse
Drug dealing, burglary, and other criminal activity
This is a work of fiction. All the characters are adults. I do not endorse or promote any of the behaviors, actions, or beliefs portrayed in this work.
If you are the owner of any media or pictures used in this game, please contact me and I will remove it.
By starting the game, you confirm again that you are at least 18 years old or have reached the age of majority in your jurisdiction<div class="location-banner">Change Logs</div>
@@.option-button-disabled; v0.2.0 - Release Date: [01/03/2026]@@
Major Additions
- Smartphone interface overhaul (optimized for mobile and desktop)
- Contacts app: dedicated screen for available characters
- Swindler: dating app (Early access version - Only the interface)
- SexTok: scrolling adult content feed
- Wallpaper app: change phone background
- Settings app: manage sound volume, player name, save/load, restart
- Four new stats:
- Strength (train at the Gym)
- Endurance (train at the Park)
- Intelligence (study at the Library)
- Charisma (socialize at the Nightclub)
- Sandbox mode: optional mode that disables stat grinding (plays like previous versions)
- Perks system: earn permanent bonuses to stats, money, or other advantages
- Avatar selection: choose between 18 different avatars
- Chapter 2 brief prologue added
<div class="menu-divider"></div>
UI Changes
- Reworked side UI bar style
- Updated main menu screen layout (more professional appearance)
- Redesigned pop-up notification style
- Map system updates
<div class="menu-divider"></div>
Gameplay & System Improvements
- Improved sound system (better handling and volume controls)
- Enhanced gun fight mini-game (mechanics and balancing)
- Upgraded inventory system: items now accessible directly from the right sidebar
- Improved advance time controls
- Various bug fixes and performance tweaks
Mobile responsiveness has been improved across the phone interface.
<div class="menu-divider"></div>
@@.option-button-disabled; Chapter 1@@
N/A<<nobr>>
<<if !$perks>>
<<set $perks = {
"strength_bonus_1": {
name: "Strength I",
image: "img/perk/strength1.png",
description: "You spent your prison time punching the wall. + 5 STR",
unlocked: true
},
"endurance_bonus_1": {
name: "Endurance I",
image: "img/perk/endurance1.png",
description: "You spent your prison time planking. + 5 END.",
unlocked: true
},
"intelligence_bonus_1": {
name: "Intelligence I",
image: "img/perk/intelligence1.png",
description: "You spent your prison time in the prison library. + 5 INT.",
unlocked: true
},
"charisma_bonus_1": {
name: "Charisma",
image: "img/perk/charisma1.png",
description: "You spent your prison time chatting with felons and murderers. + 5 CHA.",
unlocked: true
},
"money_bonus_1": {
name: "Money I",
image: "img/perk/money1.png",
description: "You spent your prison time selling cigarettes. + $500.",
unlocked: true
}
}>>
<<set $selectedPerk = "strength_bonus_1">>
<</if>><</nobr>><<nobr>>
<div class="perk-selection-header">
<h1 class="perk-selection-title">Choose Your Starting Perk</h1>
<p class="perk-selection-subtitle">Select one perk to begin your journey</p>
</div>
<div class="perk-selection" id="perk-grid">
<<for _perkId, _perk range $perks>><<capture _perkId, _perk>>
<<if _perk.unlocked>>
<!-- Unlocked Perk - Clickable -->
<div @id="'perk-' + _perkId" @class="'perk-card' + ($selectedPerk === _perkId ? ' perk-card-selected' : '')" @data-perk="_perkId">
<img @src="_perk.image" class="perk-image" @alt="_perk.name">
<div class="perk-name"><<print _perk.name>></div>
<div class="perk-tooltip">
<div class="perk-tooltip-title"><<print _perk.name>></div>
<p class="perk-tooltip-text"><<print _perk.description>></p>
</div>
</div>
<<else>>
<!-- Locked Perk -->
<div class="perk-card perk-card-locked">
<img src="img/perk/unknownperk.png" class="perk-image" alt="Locked">
<div class="perk-name">???</div>
<div class="perk-tooltip">
<div class="perk-tooltip-title">Locked Perk</div>
<p class="perk-tooltip-text">Complete objectives to unlock.</p>
</div>
</div>
<</if>>
<</capture>><</for>>
</div>
<div style="text-align: center; margin-top: 30px;">
<div class="option-button" style="max-width: 400px; margin: 0 auto;">
<<link "Confirm Selection" "NEW GAME 2">>
<<if $selectedPerk === "strength_bonus_1">>
<<set $Strength += 5>>
<<elseif $selectedPerk === "endurance_bonus_1">>
<<set $Endurance += 5>>
<<elseif $selectedPerk === "intelligence_bonus_1">>
<<set $Intelligence += 5>>
<<elseif $selectedPerk === "charisma_bonus_1">>
<<set $Charisma += 5>>
<<elseif $selectedPerk === "money_bonus_1">>
<<set $MCMoney += 500>>
<</if>>
<</link>>
</div>
</div><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner2.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<!-- JavaScript to handle selection -->
<<script>>
$(document).ready(function() {
// Add click handlers to all unlocked perk cards
$('.perk-card').not('.perk-card-locked').on('click', function() {
var perkId = $(this).attr('data-perk');
// Update selected perk variable
State.variables.selectedPerk = perkId;
// Remove selected class from all perks
$('.perk-card').removeClass('perk-card-selected');
// Add selected class to clicked perk
$(this).addClass('perk-card-selected');
});
});
<</script>><<setPassageVariableNoMap>>
<div id="pawn-shop-container"><<print setup.pawnShop.generateShopHTML()>></div><<run setup.pawnShop.setupBuyButtons()>>
@@.option-button;[[Look around|InsidePawnshop]]@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/pawnshop/pawnshopinside.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div id="map-wrapper">
<img src="img/map/chapter1map.png" id="map-img" alt="Map">
<svg id="map-svg" viewBox="0 0 100 100" preserveAspectRatio="none"
xmlns="http://www.w3.org/2000/svg">
<!-- BSD -->
<polygon class="map-hot" points="55.309,51.25 58.229,51.25 58.229,53.981 55.309,53.981"
data-location="BSD" data-passage="BSD"/>
<!-- Salt's Bar -->
<polygon class="map-hot" points="29.79,70.653 32.203,70.653 32.203,72.09 29.79,72.09"
data-location="Salt's Bar" data-passage="SaltBar"/>
<!-- Bason Park -->
<polygon class="map-hot" points="58.483,62.029 58.356,89.05 61.403,85.313 61.403,62.317"
data-location="Bason Park" data-passage="Park"/>
<!-- Bason University -->
<polygon class="map-hot" points="65.593,69.647 88.572,69.647 88.572,85.313 65.593,85.313"
data-location="Bason University" data-passage="University"/>
<!-- Carrie's House -->
<polygon class="map-hot" points="82.092,87.495 84.504,87.495 84.504,94.538 82.092,94.538"
data-location="Carrie's House" data-passage="CarrieHouse"/>
<!-- Nightclub -->
<polygon class="map-hot" points="41.598,75.54 47.565,75.54 47.565,78.271 41.598,78.271"
data-location="Nightclub" data-passage="Nightclub"/>
<!-- Abandoned Mine -->
<polygon class="map-hot" points="34.711,90.226 34.838,93.532 39.409,93.819 39.409,97.7 44.487,97.844 44.487,90.37"
data-location="Abandoned Mine" data-passage="Abandoned Mine"/>
<!-- Hotel -->
<polygon class="map-hot" points="41.471,69.216 47.692,69.216 47.692,74.965 41.471,74.965"
data-location="Hotel" data-passage="Hotel"/>
<!-- Construction Site -->
<polygon class="map-hot" points="54.801,72.522 54.166,74.103 49.723,74.821 49.723,79.277 51.754,79.995 52.643,78.558 55.69,76.977 56.071,73.384"
data-location="Construction Site" data-passage="CasinoInProgress"/>
<!-- Saint Morty's -->
<polygon class="map-hot" points="48.072,62.173 50.612,62.173 50.612,67.635 48.072,67.635"
data-location="Saint Morty's" data-passage="Church"/>
<!-- Gun Store -->
<polygon class="map-hot" points="34.615,25.379 37.408,25.379 37.408,28.541 34.615,28.541"
data-location="Gun Store" data-passage="Gun Store"/>
<!-- Town Square -->
<polygon class="map-hot" points="65.847,54.843 82.097,54.843 82.097,58.005 65.847,58.005"
data-location="Town Square" data-passage="TownSquare"/>
<!-- Bason Hospital -->
<polygon class="map-hot" points="89.334,65.479 89.207,67.635 91.111,67.635 92.762,69.791 94.666,69.647 94.666,63.754 92.635,64.042 92.254,65.479"
data-location="Bason Hospital" data-passage="Hospital"/>
<!-- Mall -->
<polygon class="map-hot" points="69.401,47.369 69.274,53.549 79.05,53.693 79.177,50.819 78.288,50.819 78.035,47.369"
data-location="Mall" data-passage="Mall"/>
<!-- Pawn Shop -->
<polygon class="map-hot" points="69.147,58.58 72.067,58.58 72.067,61.454 69.147,61.454"
data-location="Pawn Shop" data-passage="PawnShop"/>
<!-- Chicken Brother -->
<polygon class="map-hot" points="65.593,62.173 68.767,62.173 68.767,65.479 65.593,65.479"
data-location="Chicken Brother" data-passage="ChickenBrother"/>
<!-- Bank -->
<polygon class="map-hot" points="62.165,58.436 65.212,58.436 65.212,61.598 62.165,61.598"
data-location="Bank" data-passage="Bank"/>
<!-- Court -->
<polygon class="map-hot" points="62.419,54.699 65.212,54.699 65.212,58.149 62.419,58.149"
data-location="Court" data-passage="Court"/>
<!-- Rebecca Lannigan's House -->
<polygon class="map-hot" points="48.326,39.752 51.246,39.752 51.246,42.914 48.326,42.914"
data-location="Rebecca Lannigan's House" data-passage="Case1VictimHouse"/>
<!-- Town Hall -->
<polygon class="map-hot" points="55.055,54.987 61.53,54.987 61.53,61.742 55.055,61.742"
data-location="Town Hall" data-passage="TownHall"/>
<!-- Massage Parlor -->
<polygon class="map-hot" points="41.344,39.752 44.518,39.752 44.518,43.201 41.344,43.201"
data-location="Massage Parlor" data-passage="Massage Parlor"/>
<!-- Rebecca Lannigan's Crime Scene -->
<polygon class="map-hot" points="29.79,35.44 33.726,35.44 33.726,39.608 29.79,39.608"
data-location="Rebecca Lannigan's Crime Scene" data-passage="Case1CrimeScene"/>
<!-- Artifact 1 (???) -->
<polygon class="map-hot" points="20.523,37.883 22.935,37.883 22.935,40.47 20.523,40.47"
data-location="???" data-passage="Artifact1Location"/>
<!-- Artifact 2 (???) -->
<polygon class="map-hot" points="57.086,25.522 58.737,25.522 58.737,29.259 57.086,29.259"
data-location="???" data-passage="Artifact2Location"/>
<!-- Sex Shop -->
<polygon class="map-hot" points="45.152,47.513 47.819,47.513 47.819,50.819 45.152,50.819"
data-location="Sex Shop" data-passage="Sex Shop"/>
<!-- Warehouse -->
<polygon class="map-hot" points="78.923,39.32 78.923,40.614 75.495,40.758 75.622,46.794 78.923,46.65 79.431,50.387 88.699,50.387 88.572,39.464"
data-location="Warehouse" data-passage="Warehouse"/>
<!-- Danni's House -->
<polygon class="map-hot" points="38.043,43.488 39.693,43.488 39.693,47.082 38.043,47.082"
data-location="Danni's House" data-passage="DanniHouse"/>
<!-- Hair Salon -->
<polygon class="map-hot" points="62.292,69.934 65.339,69.934 65.339,73.24 62.292,73.24"
data-location="Hair Salon" data-passage="Hair Salon"/>
<!-- Library -->
<polygon class="map-hot" points="62.292,81.72 65.339,81.72 65.339,85.744 62.292,85.744"
data-location="Library" data-passage="Library"/>
<!-- David's House -->
<polygon class="map-hot" points="41.471,32.278 44.772,32.278 44.772,36.302 41.471,36.302"
data-location="David's House" data-passage="DavidHouse"/>
<!-- Route 13 -->
<polygon class="map-hot" points="40.364,100.405 36.555,97.961 31.984,93.937 25.89,91.062 18.146,81.289 16.368,79.564 15.48,78.414 17.13,78.127 26.017,88.906 34.016,93.362 39.221,97.818 42.776,100.261"
data-location="Route 13" data-passage="Route 13"/>
<!-- Haunted House -->
<polygon class="map-hot" points="34.107,50.819 36.392,50.819 36.392,54.843 34.107,54.843"
data-location="Haunted House" data-passage="Haunted House"/>
<!-- Riverbank -->
<polygon class="map-hot" points="12.78,62.025 14.418,62.025 15.883,57.741 17.866,54.82 21.918,52.288 23.038,46.056 21.831,41.188 16.228,38.754 13.814,44.206 11.918,49.951 11.745,55.988"
data-location="Riverbank" data-passage="Riverbank"/>
<!-- Spade Mansion -->
<polygon class="map-hot" points="22.681,8.419 23.062,11.437 22.554,13.593 22.173,15.174 18.999,11.868 17.476,8.994 18.237,6.694 20.776,6.694"
data-location="Spade Mansion" data-passage="Spade Mansion"/>
<!-- Jocelyn's House -->
<polygon class="map-hot" points="79.68,87.351 81.965,87.351 81.965,94.825 79.68,94.825"
data-location="Jocelyn's House" data-passage="JocelynHouse"/>
</svg>
<div id="location-name"></div>
</div>
@@.option-button;<<link "Go Back">><<goto $prevPassage>><</link>>@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/orgypainting.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<nobr>><div id="gm-wrap">
<div id="gm-title">SELECT GAME MODE</div>
<div id="gm-list">
<button class="option-button" id="gm-btn-1" data-id="1" onclick="gmSelect(this)">
SANDBOX MODE
<span class="gm-desc">Total freedom. All stats are maxed out. Explore the world without limits</span>
</button>
<button class="option-button" id="gm-btn-2" data-id="2" onclick="gmSelect(this)">
STORY MODE
<span class="gm-desc">Experience the narrative at a relaxed pace. Balanced stats for a comfortable journey</span>
</button>
<button class="option-button" id="gm-btn-3" data-id="3" onclick="gmSelect(this)">
HARDCORE MODE
<span class="gm-desc">The ultimate challenge. Every decision matters. Survive if you can</span>
</button>
</div>
<button class="option-button" id="gm-continue" onclick="gmConfirm()">
CONTINUE
</button>
</div><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner2.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<script>>
(function () {
var current = State.variables.GameMode;
window._gmSelected = current;
var btn = document.querySelector('.option-button[data-id="' + current + '"]');
if (btn) btn.classList.add('gm-active');
window.gmSelect = function (el) {
document.querySelectorAll('.option-button[data-id]').forEach(function (b) {
b.classList.remove('gm-active');
});
el.classList.add('gm-active');
window._gmSelected = parseInt(el.getAttribute('data-id'));
};
window.gmConfirm = function () {
State.variables.GameMode = window._gmSelected;
Engine.play('ApplyGameMode');
};
}());
<</script>><<switch $GameMode>>
<<case 1>>
/* ── Sandbox ── */
<<set $GameMode = 1>>
<<set $Strength = 999>>
<<set $Endurance = 999>>
<<set $Intelligence = 999>>
<<set $Charisma = 999>>
<<set $maxEnergy = 999>>
<<set $energy = 999>>
<<set $GunAccuracy to 100>>
<<set $MCMoney = 10000000>>
<<set $lastate to setup.changeDate($now, 'years', 1)>>
<<case 2>>
/* ── Story ── */
<<set $GameMode = 2>>
<<case 3>>
/* ── Hardcore ── */
<<set $GameMode = 3>>
<<set $lastate to setup.changeDate($now, 'days', -1)>>
<</switch>>
<<goto "PerkSelection">><div class="location-banner">Chapter selection</div>
<img src="img/various/funnygif1.gif" width=50% style="display: block; margin: 0 auto;">
<<nobr>>@@.option-button;[[Prologue|Start]]@@
@@.option-button;[[Chapter I|End of Prologue]]@@<</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/banner2.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(1.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">Library</div>
<<nobr>><<set $LibraryCheckout = Math.floor(Math.random() * 100)>>
<<if $LibraryCheckout <= 20>>
<video width="640" height="360" controls autoplay muted loop style="display:block;margin:0 auto;">
<source src="img/various/librarygoer1.mp4" type="video/mp4">
</video>
<<elseif $LibraryCheckout > 80>>
<video width="640" height="360" controls autoplay muted loop style="display:block;margin:0 auto;">
<source src="img/various/librarygoer2.mp4" type="video/mp4">
</video>
<<elseif $LibraryCheckout > 20 && $LibraryCheckout <=40 >>
<video width="640" height="360" controls autoplay muted loop style="display:block;margin:0 auto;">
<source src="img/various/librarygoer3.mp4" type="video/mp4">
</video>
<<elseif $LibraryCheckout > 40 && $LibraryCheckout <=60 >>
<video width="640" height="360" controls autoplay muted loop style="display:block;margin:0 auto;">
<source src="img/various/librarygoer4.mp4" type="video/mp4">
</video>
<<elseif $LibraryCheckout > 60 && $LibraryCheckout <=80 >>
<video width="640" height="360" controls autoplay muted loop style="display:block;margin:0 auto;">
<source src="img/various/librarygoer5.mp4" type="video/mp4">
</video>
<</if>><</nobr>><<setPassageVariableNoMap>><<nobr>><<if setup.isOpeningHours($now)>>
<<if $energy >= 10>>
@@.option-button;<<link "Read Book">><<set $now = setup.changeDate($now, 'minutes', 30)>><<set $Intelligence += 1>><<set $energy to Math.max($energy - 10, 0)>><<run setup.showNotification("Your Intelligence has increased by 1")>><<goto "Library Read Book">><</link>>@@
<<else>>
@@.option-button-disabled;Insufficient energy@@<</if>>
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/library/library.jpg][Library]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/library/library.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div id="map-scroll-outer">
<div id="map-wrapper-full">
<img src="img/map/chapter2map.png" id="map-img" alt="Map">
<svg id="map-svg" viewBox="0 0 200 100" preserveAspectRatio="none"
xmlns="http://www.w3.org/2000/svg">
<!-- BSD -->
<polygon class="map-hot" points="55.309,51.25 58.229,51.25 58.229,53.981 55.309,53.981"
data-location="BSD" data-passage="BSD"/>
<!-- Salt's Bar -->
<polygon class="map-hot" points="29.79,70.653 32.203,70.653 32.203,72.09 29.79,72.09"
data-location="Salt's Bar" data-passage="SaltBar"/>
<!-- Bason Park -->
<polygon class="map-hot" points="58.483,62.029 58.356,89.05 61.403,85.313 61.403,62.317"
data-location="Bason Park" data-passage="Park"/>
<!-- Bason University -->
<polygon class="map-hot" points="65.593,69.647 88.572,69.647 88.572,85.313 65.593,85.313"
data-location="Bason University" data-passage="University"/>
<!-- Carrie's House -->
<polygon class="map-hot" points="82.478,87.044 84.79,87.044 84.79,94.087 82.478,94.087"
data-location="Carrie's House" data-passage="CarrieHouse"/>
<!-- Nightclub -->
<polygon class="map-hot" points="41.598,74.54 47.565,74.54 47.565,78.271 41.598,78.271"
data-location="Nightclub" data-passage="Nightclub"/>
<!-- Abandoned Mine -->
<polygon class="map-hot" points="34.15,89.775 34.15,93.081 38.551,93.368 38.551,97.249 43.629,97.393 43.629,89.775"
data-location="Abandoned Mine" data-passage="Abandoned Mine"/>
<!-- Hotel -->
<polygon class="map-hot" points="41.471,69.216 47.692,69.216 47.692,73.965 41.471,73.965"
data-location="Hotel" data-passage="Hotel"/>
<!-- Construction Site -->
<polygon class="map-hot" points="54.801,72.522 54.166,74.103 49.723,74.821 49.723,79.277 51.754,79.995 52.643,78.558 55.69,76.977 56.071,73.384"
data-location="Construction Site" data-passage="CasinoInProgress"/>
<!-- Saint Morty's -->
<polygon class="map-hot" points="48.072,62.173 50.612,62.173 50.612,67.635 48.072,67.635"
data-location="Saint Morty's" data-passage="Church"/>
<!-- Gun Store -->
<polygon class="map-hot" points="34.815,25.379 38.408,25.379 38.408,28.541 34.615,28.541"
data-location="Gun Store" data-passage="Gun Store"/>
<!-- Town Square -->
<polygon class="map-hot" points="65.847,54.843 82.097,54.843 82.097,58.005 65.847,58.005"
data-location="Town Square" data-passage="TownSquare"/>
<!-- Bason Hospital -->
<polygon class="map-hot" points="89.334,65.479 89.207,67.635 91.111,67.635 92.762,69.791 94.666,69.647 94.666,63.754 92.635,64.042 92.254,65.479"
data-location="Bason Hospital" data-passage="Hospital"/>
<!-- Mall -->
<polygon class="map-hot" points="69.401,47.369 69.274,53.549 79.05,53.693 79.177,50.819 78.288,50.819 78.035,47.369"
data-location="Mall" data-passage="Mall"/>
<!-- Pawn Shop -->
<polygon class="map-hot" points="69.147,58.58 72.067,58.58 72.067,61.454 69.147,61.454"
data-location="Pawn Shop" data-passage="PawnShop"/>
<!-- Chicken Brother -->
<polygon class="map-hot" points="65.593,62.173 68.767,62.173 68.767,65.479 65.593,65.479"
data-location="Chicken Brother" data-passage="ChickenBrother"/>
<!-- Bank -->
<polygon class="map-hot" points="62.165,58.436 65.212,58.436 65.212,61.598 62.165,61.598"
data-location="Bank" data-passage="Bank"/>
<!-- Court -->
<polygon class="map-hot" points="62.419,54.699 65.212,54.699 65.212,58.149 62.419,58.149"
data-location="Court" data-passage="Court"/>
<!-- Rebecca Lannigan's House -->
<polygon class="map-hot" points="48.326,39.752 51.246,39.752 51.246,42.914 48.326,42.914"
data-location="Rebecca Lannigan's House" data-passage="Case1VictimHouse"/>
<!-- Town Hall -->
<polygon class="map-hot" points="55.055,54.987 61.53,54.987 61.53,61.742 55.055,61.742"
data-location="Town Hall" data-passage="TownHall"/>
<!-- Massage Parlor -->
<polygon class="map-hot" points="41.344,39.752 44.518,39.752 44.518,43.201 41.344,43.201"
data-location="Massage Parlor" data-passage="Massage Parlor"/>
<!-- Rebecca Lannigan's Crime Scene -->
<polygon class="map-hot" points="29.79,35.44 33.726,35.44 33.726,39.608 29.79,39.608"
data-location="Rebecca Lannigan's Crime Scene" data-passage="Case1CrimeScene"/>
<!-- Artifact 1 (???) -->
<polygon class="map-hot" points="20.523,37.883 22.935,37.883 22.935,40.47 20.523,40.47"
data-location="???" data-passage="Artifact1Location"/>
<!-- Artifact 2 (???) -->
<polygon class="map-hot" points="57.086,25.522 58.737,25.522 58.737,29.259 57.086,29.259"
data-location="???" data-passage="Artifact2Location"/>
<!-- Sex Shop -->
<polygon class="map-hot" points="45.152,47.513 47.819,47.513 47.819,50.819 45.152,50.819"
data-location="Sex Shop" data-passage="Sex Shop"/>
<!-- Warehouse -->
<polygon class="map-hot" points="78.923,39.32 78.923,40.614 75.495,40.758 75.622,46.794 78.923,46.65 79.431,50.387 88.699,50.387 88.572,39.464"
data-location="Warehouse" data-passage="Warehouse"/>
<!-- Danni's House -->
<polygon class="map-hot" points="38.043,43.488 39.693,43.488 39.693,47.082 38.043,47.082"
data-location="Danni's House" data-passage="DanniHouse"/>
<!-- Hair Salon -->
<polygon class="map-hot" points="62.292,69.934 65.339,69.934 65.339,73.24 62.292,73.24"
data-location="Hair Salon" data-passage="Hair Salon"/>
<!-- Library -->
<polygon class="map-hot" points="62.292,80.72 65.339,80.72 65.339,84.744 62.292,84.744"
data-location="Library" data-passage="Library"/>
<!-- David's House -->
<polygon class="map-hot" points="41.471,32.278 44.772,32.278 44.772,36.302 41.471,36.302"
data-location="David's House" data-passage="DavidHouse"/>
<!-- Route 13 -->
<polygon class="map-hot" points="40.364,100.405 36.555,97.961 31.984,93.937 25.89,91.062 18.146,81.289 16.368,79.564 15.48,78.414 17.13,78.127 26.017,88.906 34.016,93.362 39.221,97.818 42.776,100.261"
data-location="Route 13" data-passage="Route 13"/>
<!-- Haunted House -->
<polygon class="map-hot" points="34.107,50.819 36.392,50.819 36.392,54.843 34.107,54.843"
data-location="Haunted House" data-passage="Haunted House"/>
<!-- Riverbank -->
<polygon class="map-hot" points="12.78,62.025 14.418,62.025 15.883,57.741 17.866,54.82 21.918,52.288 23.038,46.056 21.831,41.188 16.228,38.754 13.814,44.206 11.918,49.951 11.745,55.988"
data-location="Riverbank" data-passage="Riverbank"/>
<!-- Spade Mansion -->
<polygon class="map-hot" points="22.681,8.419 23.062,11.437 22.554,13.593 22.173,15.174 18.999,11.868 17.476,8.994 18.237,6.694 20.776,6.694"
data-location="Spade Mansion" data-passage="Spade Mansion"/>
<!-- Jocelyn's House -->
<polygon class="map-hot" points="79.566,86.9 81.651,86.9 81.651,94.374 79.566,94.374"
data-location="Jocelyn's House" data-passage="JocelynHouse"/>
</svg>
<div id="location-name"></div>
</div>
</div><!-- map-scroll-outer -->
@@.option-button;<<link "Go Back">><<goto $prevPassage>><</link>>@@
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/orgypainting.jpg') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<div class="location-banner">Firing Range</div><<setPassageVariableNoMap>>
@@.option-button;[[Practice|Practice Shooting]]@@
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/sheriffoffice.png][SheriffOffice]]>><</button>>
<div class="location-name"><b>Sheriff Office</b></div>
</td>
<td>
<<button [img[img/location/bsd/squadroom.jpg][SquadRoom]]>><</button>>
<div class="location-name"><b>Squad Room</b></div>
</td>
<td>
<<button [img[img/location/bsd/emptyarmory.png][Armory]]>><</button>>
<div class="location-name"><b>Armory</b></div>
</td>
</tr>
<tr>
<td>
<<button [img[img/location/bsd/morgue.jpg][Morgue]]>><</button>>
<div class="location-name"><b>Morgue</b></div>
</td>
<td>
<<button [img[img/location/bsd/cell.jpg][Cell]]>><</button>>
<div class="location-name"><b>Cell Rooms</b></div>
</td>
<td>
<<button [img[img/location/bsd/bsdreception.png][BSDInside]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/firingrange.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<setPassageVariableNoMap>><<nobr>>
<!-- Initialize default values if not set -->
<<if !$GunEnemyCount>><<set $GunEnemyCount = 5>><</if>>
<<if !$GunTimeLimit>><<set $GunTimeLimit = 20>><</if>>
<</nobr>><<nobr>>
<div class="minigame-settings-panel">
<div class="settings-header">
<h2>Mini-Game Settings</h2>
<p>Adjust difficulty before starting</p>
</div>
<!-- Enemy Count Setting -->
<div class="setting-row">
<div class="setting-label">
<span class="setting-icon">🎯</span>
<span class="setting-name">Enemy Count</span>
</div>
<div class="setting-control">
<input type="range"
id="enemy-count-slider"
min="1"
max="20"
@value="$GunEnemyCount"
class="setting-slider">
<div class="setting-value" id="enemy-count-value"><<print $GunEnemyCount>></div>
</div>
</div>
<!-- Time Limit Setting -->
<div class="setting-row">
<div class="setting-label">
<span class="setting-icon">⏱️</span>
<span class="setting-name">Time Limit (seconds)</span>
</div>
<div class="setting-control">
<input type="range"
id="time-limit-slider"
min="5"
max="60"
@value="$GunTimeLimit"
class="setting-slider">
<div class="setting-value" id="time-limit-value"><<print $GunTimeLimit>>s</div>
</div>
</div>
<!-- Random Button -->
<div class="setting-row setting-row-center">
<button id="randomize-btn" class="random-button">
🎲 Randomize Settings
</button>
</div>
</div>
<<if $energy >= 10>>
<div style="text-align: center; margin-top: 30px;">
<div class="option-button" style="max-width: 400px; margin: 0 auto;">
<<link "Start Mini-Game" "Practice Shooting 1">>
<!-- Values are already set by sliders -->
<</link>>
</div>
</div>
<<else>>
@@.option-button-disabled;Insufficient energy@@<</if>>
<</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/firingrange.png][FiringRange]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/firingrange.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<script>>
$(document).ready(function() {
// Enemy Count Slider
$('#enemy-count-slider').on('input', function() {
var value = parseInt($(this).val());
State.variables.GunEnemyCount = value;
$('#enemy-count-value').text(value);
});
// Time Limit Slider
$('#time-limit-slider').on('input', function() {
var value = parseInt($(this).val());
State.variables.GunTimeLimit = value;
$('#time-limit-value').text(value + 's');
});
// Random Button
$('#randomize-btn').on('click', function() {
// Random enemy count (1-20)
var randomEnemies = Math.floor(Math.random() * 20) + 1;
State.variables.GunEnemyCount = randomEnemies;
$('#enemy-count-slider').val(randomEnemies);
$('#enemy-count-value').text(randomEnemies);
// Random time limit (5-60)
var randomTime = Math.floor(Math.random() * 56) + 5;
State.variables.GunTimeLimit = randomTime;
$('#time-limit-slider').val(randomTime);
$('#time-limit-value').text(randomTime + 's');
// Visual feedback
$(this).addClass('random-button-active');
setTimeout(function() {
$('#randomize-btn').removeClass('random-button-active');
}, 300);
});
});
<</script>>
<style>
/* Mini-Game Settings Panel */
.minigame-settings-panel {
background: linear-gradient(135deg, rgba(15, 15, 15, 0.95) 0%, rgba(25, 25, 25, 0.95) 100%);
border: 2px solid #c9a961;
padding: 30px;
margin: 30px auto;
max-width: 600px;
clip-path: polygon(15px 0, 100% 0, 100% calc(100% - 15px), calc(100% - 15px) 100%, 0 100%, 0 15px);
box-shadow:
0 0 30px rgba(201, 169, 97, 0.4),
0 10px 30px rgba(0, 0, 0, 0.8);
position: relative;
}
/* Film grain effect */
.minigame-settings-panel::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='2.5' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.15'/%3E%3C/svg%3E");
opacity: 0.2;
pointer-events: none;
z-index: 1;
}
.minigame-settings-panel > * {
position: relative;
z-index: 2;
}
/* Settings Header */
.settings-header {
text-align: center;
margin-bottom: 30px;
padding-bottom: 20px;
border-bottom: 2px solid rgba(201, 169, 97, 0.3);
}
.settings-header h2 {
color: #c9a961;
font-size: 1.8em;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.15em;
margin: 0 0 10px 0;
font-family: 'Montserrat', sans-serif;
text-shadow: 0 0 15px rgba(201, 169, 97, 0.6);
}
.settings-header p {
color: #888;
font-size: 0.9em;
margin: 0;
font-family: 'Montserrat', sans-serif;
}
/* Setting Row */
.setting-row {
margin-bottom: 25px;
padding: 20px;
background: rgba(0, 0, 0, 0.3);
border-left: 3px solid #c9a961;
clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);
}
.setting-row-center {
text-align: center;
border-left: none;
clip-path: none;
background: transparent;
}
/* Setting Label */
.setting-label {
display: flex;
align-items: center;
margin-bottom: 15px;
}
.setting-icon {
font-size: 1.8em;
margin-right: 12px;
filter: drop-shadow(0 2px 5px rgba(0, 0, 0, 0.8));
}
.setting-name {
color: #c9a961;
font-size: 1.1em;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.08em;
font-family: 'Montserrat', sans-serif;
text-shadow: 0 0 8px rgba(201, 169, 97, 0.4);
}
/* Setting Control */
.setting-control {
display: flex;
align-items: center;
gap: 20px;
}
/* Slider */
.setting-slider {
flex: 1;
height: 8px;
border-radius: 4px;
background: rgba(0, 0, 0, 0.5);
outline: none;
-webkit-appearance: none;
border: 1px solid rgba(201, 169, 97, 0.3);
}
.setting-slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 24px;
height: 24px;
border-radius: 50%;
background: #c9a961;
cursor: pointer;
box-shadow: 0 0 10px rgba(201, 169, 97, 0.6);
transition: all 0.3s ease;
}
.setting-slider::-webkit-slider-thumb:hover {
transform: scale(1.2);
box-shadow: 0 0 15px rgba(201, 169, 97, 0.8);
}
.setting-slider::-moz-range-thumb {
width: 24px;
height: 24px;
border-radius: 50%;
background: #c9a961;
cursor: pointer;
border: none;
box-shadow: 0 0 10px rgba(201, 169, 97, 0.6);
transition: all 0.3s ease;
}
.setting-slider::-moz-range-thumb:hover {
transform: scale(1.2);
box-shadow: 0 0 15px rgba(201, 169, 97, 0.8);
}
/* Slider Track Color */
.setting-slider::-webkit-slider-runnable-track {
background: linear-gradient(to right,
#c9a961 0%,
#c9a961 var(--value, 50%),
rgba(0, 0, 0, 0.5) var(--value, 50%),
rgba(0, 0, 0, 0.5) 100%
);
}
/* Value Display */
.setting-value {
min-width: 60px;
padding: 8px 15px;
background: rgba(0, 0, 0, 0.5);
border: 1px solid rgba(201, 169, 97, 0.4);
text-align: center;
color: #c9a961;
font-weight: 700;
font-size: 1.1em;
font-family: 'Montserrat', sans-serif;
clip-path: polygon(5px 0, 100% 0, calc(100% - 5px) 100%, 0 100%);
text-shadow: 0 0 8px rgba(201, 169, 97, 0.5);
}
/* Random Button */
.random-button {
background: linear-gradient(135deg, rgba(15, 15, 15, 0.9) 0%, rgba(25, 25, 25, 0.9) 100%);
border: 2px solid rgba(201, 169, 97, 0.6);
color: #c9a961;
padding: 15px 40px;
font-family: 'Montserrat', sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.15em;
font-size: 1em;
cursor: pointer;
transition: all 0.3s ease;
clip-path: polygon(10px 0, 100% 0, calc(100% - 10px) 100%, 0 100%);
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.5);
}
.random-button:hover {
background: linear-gradient(135deg, rgba(25, 25, 25, 0.9) 0%, rgba(35, 35, 35, 0.9) 100%);
border-color: #c9a961;
color: #e6c170;
transform: translateY(-3px);
text-shadow: 0 0 10px rgba(201, 169, 97, 0.6);
box-shadow:
0 0 20px rgba(201, 169, 97, 0.4),
0 6px 20px rgba(0, 0, 0, 0.6);
}
.random-button:active,
.random-button-active {
transform: translateY(0) scale(0.98);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
}
/* Responsive */
@media (max-width: 600px) {
.minigame-settings-panel {
padding: 20px;
}
.setting-control {
flex-direction: column;
align-items: stretch;
gap: 10px;
}
.setting-value {
min-width: auto;
width: 100%;
}
}
</style><!--
=================================================================
GUNFIGHT MINIGAME — Twine SugarCube
=================================================================
HOW TO USE IN YOUR PASSAGE:
1. Set your variables before entering this passage:
<<set $GunAccuracy to 60>> (0–100, hit chance %)
<<set $GunEnemyCount to 3>> (how many enemies)
<<set $GunTimeLimit to 15>> (seconds to kill them all)
2. Paste this entire file's content into a Twine passage.
3. On WIN → goes to passage: DefeatedThug
On LOSE → goes to passage: BADEnding2Bundle1
That's it. You can reuse this passage any time by just
setting the three variables differently each time.
=================================================================
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gunfight</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Rye&family=Special+Elite&display=swap');
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--gold: #d4a017;
--gold-dim: #8b6914;
--blood: #c8360c;
--dark: #0d0a07;
--panel: #1a1208;
}
html, body {
width: 100%; height: 100%;
background: var(--dark);
font-family: 'Special Elite', serif;
overflow: hidden;
cursor: none;
}
/* Scanlines */
body::after {
content: '';
position: fixed; inset: 0;
background: repeating-linear-gradient(
0deg, transparent, transparent 2px,
rgba(0,0,0,0.12) 2px, rgba(0,0,0,0.12) 4px
);
pointer-events: none; z-index: 9998;
}
/* ── Cursor ── */
#cursor {
position: fixed; width: 48px; height: 48px;
pointer-events: none;
transform: translate(-50%, -50%);
z-index: 9999; transition: transform 0.05s;
}
#cursor.firing { transform: translate(-50%, -50%) scale(0.7); }
#cursor.on-enemy .cur-ring { stroke: #ff4422 !important; }
#cursor.on-enemy .cur-lines { stroke: #ff4422 !important; }
/* ── Arena ── */
#arena {
position: fixed; inset: 0;
background-image: url('img/location/bsd/firingrange.png');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
overflow: hidden;
}
#arena::after {
content: '';
position: absolute; bottom: 120px; left: 0; right: 0; height: 2px;
background: linear-gradient(90deg, transparent, #3d2d0a 20%, #5a3d10 50%, #3d2d0a 80%, transparent);
}
.vignette {
position: absolute; inset: 0;
background: radial-gradient(ellipse at center, transparent 40%, rgba(0,0,0,0.75) 100%);
pointer-events: none; z-index: 1;
}
/* ── Dust ── */
.dust {
position: absolute; border-radius: 50%;
background: rgba(180,130,50,0.15);
pointer-events: none;
animation: dustfloat linear infinite;
}
@keyframes dustfloat {
0% { transform: translateY(0) translateX(0); opacity: 0; }
10% { opacity: 1; }
90% { opacity: 0.4; }
100% { transform: translateY(-80px) translateX(20px); opacity: 0; }
}
/* ── HUD top bar ── */
#hud {
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
padding: 10px 24px 8px;
background: linear-gradient(180deg, rgba(13,10,7,0.97) 0%, transparent 100%);
border-bottom: 1px solid rgba(61,45,10,0.5);
display: flex; align-items: center; justify-content: space-between; gap: 16px;
}
.hud-title {
font-family: 'Rye', serif; color: var(--gold);
font-size: 20px; letter-spacing: 4px;
text-shadow: 0 0 20px rgba(212,160,23,0.5);
flex-shrink: 0;
}
.hud-right { display: flex; align-items: center; gap: 24px; }
.hud-stat { text-align: center; }
.hud-stat-label {
color: var(--gold-dim); font-size: 11px;
letter-spacing: 3px; text-transform: uppercase;
display: block; margin-bottom: 3px;
}
.hud-stat-val { color: var(--gold); font-size: 24px; line-height: 1; }
/* Enemy pips */
#enemy-pips { display: flex; gap: 6px; align-items: center; }
.pip {
width: 10px; height: 10px; border-radius: 50%;
background: #ff4422; box-shadow: 0 0 6px #ff2200; transition: all 0.3s;
}
.pip.dead { background: #3d2d0a; box-shadow: none; }
/* ── Timer widget (bottom right) ── */
#timer-wrap {
position: fixed; bottom: 48px; right: 24px; z-index: 101;
width: 180px;
background: rgba(13,10,7,0.85);
border: 1px solid rgba(139,105,20,0.6);
padding: 7px 12px 8px;
backdrop-filter: blur(4px);
}
#timer-wrap-label {
color: var(--gold-dim); font-size: 9px; letter-spacing: 3px;
text-transform: uppercase; display: flex; justify-content: space-between;
margin-bottom: 5px;
}
#timer-wrap-label #time-val-outer { color: var(--gold); font-size: 13px; font-family: 'Special Elite', serif; }
#timer-bar-bg {
height: 6px; background: #1a1208; border-radius: 2px; overflow: hidden;
}
#timer-bar {
height: 100%; width: 100%; border-radius: 2px;
background: linear-gradient(90deg, var(--blood), #f5a623, #f5c842);
transform-origin: left;
transition: width 0.25s linear;
}
#timer-bar.urgent { background: linear-gradient(90deg, #5a0000, var(--blood)); }
/* ── Countdown number (big center flash) ── */
#countdown-flash {
position: fixed; inset: 0; z-index: 600;
display: flex; align-items: center; justify-content: center;
pointer-events: none; opacity: 0;
}
#countdown-flash span {
font-family: 'Rye', serif; font-size: 160px;
color: var(--gold); text-shadow: 0 0 60px rgba(212,160,23,0.7);
line-height: 1;
}
#countdown-flash.show { animation: cflash 0.6s ease-out forwards; }
@keyframes cflash {
0% { opacity: 1; transform: scale(1.4); }
60% { opacity: 0.7; transform: scale(1); }
100% { opacity: 0; transform: scale(0.9); }
}
/* ── Enemy ── */
.enemy {
position: absolute;
transform: translate(-50%, -100%);
cursor: none; z-index: 10;
animation: enemyAppear 0.3s ease-out both;
user-select: none;
}
@keyframes enemyAppear {
from { transform: translate(-50%, -70%); opacity: 0; }
to { transform: translate(-50%, -100%); opacity: 1; }
}
.enemy:hover .enemy-svg { filter: drop-shadow(0 0 10px rgba(255,68,34,0.9)); }
.enemy-svg {
display: block;
filter: drop-shadow(0 0 4px rgba(200,100,50,0.2));
}
.eye { animation: eyepulse 1.4s ease-in-out infinite alternate; }
@keyframes eyepulse {
from { opacity: 0.5; }
to { opacity: 1; filter: drop-shadow(0 0 3px #ff2200); }
}
.enemy.dying {
animation: enemyDie 0.5s ease-out forwards;
pointer-events: none;
}
@keyframes enemyDie {
0% { transform: translate(-50%, -100%) rotate(0deg); opacity: 1; }
40% { transform: translate(-50%, -90%) rotate(-15deg); opacity: 0.8; }
100% { transform: translate(-50%, -60%) rotate(-40deg); opacity: 0; }
}
.enemy.scared { animation: enemyScared 0.3s ease both; }
@keyframes enemyScared {
0%,100% { transform: translate(-50%, -100%); }
33% { transform: translate(calc(-50% - 5px), -100%) rotate(-4deg); }
66% { transform: translate(calc(-50% + 5px), -100%) rotate(4deg); }
}
/* ── Muzzle flash ── */
#muzzle-flash {
position: fixed; inset: 0;
pointer-events: none; z-index: 500; opacity: 0;
}
#muzzle-flash.flash { animation: mflash 0.12s ease-out forwards; }
@keyframes mflash {
0% { opacity: 1; background: radial-gradient(circle at var(--fx,50%) var(--fy,50%), rgba(255,220,100,0.45) 0%, transparent 40%); }
100% { opacity: 0; }
}
/* ── Impact text ── */
.impact {
position: fixed; pointer-events: none; z-index: 200;
transform: translate(-50%, -50%);
animation: impactanim 0.55s ease-out forwards;
}
@keyframes impactanim {
0% { opacity: 1; transform: translate(-50%,-50%) scale(0.5); }
50% { opacity: 1; transform: translate(-50%,-50%) scale(1.2); }
100% { opacity: 0; transform: translate(-50%,-70%) scale(1.4); }
}
.impact-hit { color: #f5c842; font-size: 22px; font-family: 'Rye', serif; text-shadow: 0 0 10px rgba(245,200,66,0.8); }
.impact-miss { color: #5a3d10; font-size: 15px; font-family: 'Special Elite', serif; letter-spacing: 2px; }
/* ── Bullet holes ── */
.bullet-hole {
position: fixed; width: 10px; height: 10px; border-radius: 50%;
transform: translate(-50%, -50%);
background: radial-gradient(circle, #0d0a07 30%, #2a1208 70%, #3d2d0a 100%);
border: 1px solid #5a3d10;
box-shadow: 0 0 6px rgba(0,0,0,0.8), inset 0 1px 2px rgba(0,0,0,0.9);
pointer-events: none; z-index: 50;
animation: holein 0.15s ease-out both;
}
@keyframes holein {
from { transform: translate(-50%,-50%) scale(0); }
to { transform: translate(-50%,-50%) scale(1); }
}
/* ── Bottom bar ── */
#bottom-bar {
position: fixed; bottom: 0; left: 0; right: 0; z-index: 100;
padding: 10px 24px;
background: linear-gradient(0deg, rgba(13,10,7,0.98) 0%, transparent 100%);
border-top: 1px solid rgba(61,45,10,0.5);
display: flex; align-items: center; justify-content: space-between;
}
.acc-wrap { flex: 1; max-width: 260px; }
.acc-label {
color: var(--gold-dim); font-size: 9px; letter-spacing: 3px;
text-transform: uppercase; margin-bottom: 4px;
display: flex; justify-content: space-between;
}
.acc-label span { color: #7aaa55; }
.acc-bar-bg {
height: 6px; background: #2a1f0d; border: 1px solid #5a3d10; border-radius: 2px; overflow: hidden;
}
#acc-bar-fill {
height: 100%; border-radius: 2px;
background: linear-gradient(90deg, var(--blood), #f5c842, #7aaa55);
}
.instruct { color: #5a4015; font-size: 11px; letter-spacing: 2px; }
/* ── Result overlay ── */
#result-overlay {
position: fixed; inset: 0; z-index: 1000;
display: flex; align-items: center; justify-content: center;
background: rgba(0,0,0,0); opacity: 0; pointer-events: none;
transition: background 0.5s, opacity 0.5s; text-align: center;
}
#result-overlay.visible {
opacity: 1; pointer-events: all; background: rgba(0,0,0,0.9);
}
.result-card {
border: 2px solid var(--gold-dim); background: var(--panel);
padding: 40px 56px; position: relative; max-width: 440px; width: 90%;
transform: translateY(20px); transition: transform 0.4s 0.1s ease;
}
#result-overlay.visible .result-card { transform: translateY(0); }
.result-card::before { content: '✦'; position: absolute; top: 10px; left: 14px; color: var(--gold-dim); font-size: 18px; }
.result-card::after { content: '✦'; position: absolute; bottom: 10px; right: 14px; color: var(--gold-dim); font-size: 18px; }
.result-title { font-family: 'Rye', serif; font-size: 42px; letter-spacing: 3px; margin-bottom: 6px; }
.result-title.win { color: #f5c842; text-shadow: 0 0 30px rgba(245,200,66,0.6); }
.result-title.lose { color: var(--blood); text-shadow: 0 0 30px rgba(200,54,12,0.6); }
.result-divider { width: 80px; height: 2px; background: var(--gold-dim); margin: 14px auto; }
.result-desc { color: #9a8060; font-size: 13px; letter-spacing: 1px; line-height: 1.7; margin-bottom: 14px; }
.result-stats { display: flex; gap: 20px; justify-content: center; margin-bottom: 24px; }
.rstat { text-align: center; }
.rstat-label { color: #5a4015; font-size: 9px; letter-spacing: 2px; text-transform: uppercase; display: block; margin-bottom: 3px; }
.rstat-val { color: var(--gold); font-size: 20px; }
.continue-btn {
padding: 12px 40px; border: 2px solid var(--gold-dim); background: transparent;
color: var(--gold); font-family: 'Special Elite', serif;
font-size: 13px; letter-spacing: 4px; text-transform: uppercase;
cursor: pointer; transition: all 0.15s;
}
.continue-btn:hover { background: var(--gold-dim); color: var(--dark); }
</style>
</head>
<body>
<div id="cursor">
<svg viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
<circle class="cur-ring" cx="24" cy="24" r="18" stroke="#d4a017" stroke-width="1.5" fill="none"/>
<circle class="cur-ring" cx="24" cy="24" r="10" stroke="#d4a017" stroke-width="1" fill="none" stroke-dasharray="3 3" opacity="0.6"/>
<circle cx="24" cy="24" r="2" fill="#d4a017"/>
<line class="cur-lines" x1="24" y1="0" x2="24" y2="10" stroke="#d4a017" stroke-width="1.5"/>
<line class="cur-lines" x1="24" y1="38" x2="24" y2="48" stroke="#d4a017" stroke-width="1.5"/>
<line class="cur-lines" x1="0" y1="24" x2="10" y2="24" stroke="#d4a017" stroke-width="1.5"/>
<line class="cur-lines" x1="38" y1="24" x2="48" y2="24" stroke="#d4a017" stroke-width="1.5"/>
</svg>
</div>
<div id="muzzle-flash"></div>
<div id="arena"><div class="vignette"></div></div>
<div id="hud">
<div class="hud-title">✦ DRAW! ✦</div>
<div class="hud-right">
<div class="hud-stat">
<span class="hud-stat-label">Enemies</span>
<div id="enemy-pips"></div>
</div>
<div class="hud-stat">
<span class="hud-stat-label">Shot Accuracy</span>
<span class="hud-stat-val" id="remaining-val">—</span>
</div>
<div class="hud-stat">
<span class="hud-stat-label">Time</span>
<span class="hud-stat-val" id="time-val">—</span>
</div>
<div class="hud-stat">
<span class="hud-stat-label">Hits</span>
<span class="hud-stat-val" id="hits-val">0</span>
</div>
</div>
</div>
<div id="timer-wrap">
<div id="timer-wrap-label">
<span>⏱ Time</span>
<span id="time-val-outer">—</span>
</div>
<div id="timer-bar-bg"><div id="timer-bar"></div></div>
</div>
<div id="countdown-flash"><span id="countdown-num"></span></div>
<div id="bottom-bar">
<div class="acc-wrap">
<div class="acc-label">Hit chance <span id="acc-pct-label">—</span></div>
<div class="acc-bar-bg"><div id="acc-bar-fill" style="width:0%"></div></div>
</div>
<div class="instruct">CLICK ENEMIES TO SHOOT</div>
</div>
<div id="result-overlay">
<div class="result-card">
<div class="result-title" id="result-title"></div>
<div class="result-divider"></div>
<div class="result-desc" id="result-desc"></div>
<div class="result-stats">
<div class="rstat"><span class="rstat-label">Shots fired</span><span class="rstat-val" id="r-shots">0</span></div>
<div class="rstat"><span class="rstat-label">Accuracy</span> <span class="rstat-val" id="r-hits">0%</span></div>
<div class="rstat"><span class="rstat-label">Time left</span> <span class="rstat-val" id="r-time">0s</span></div>
</div>
<button class="continue-btn" onclick="handleContinue()">Continue →</button>
</div>
</div>
<script>
(function() {
// ═══════════════════════════════════════════════════════════════
// CONFIG — reads from SugarCube story variables.
// Set these before entering the passage:
// <<set $GunAccuracy to 60>> ← hit chance % (0–100)
// <<set $GunEnemyCount to 3>> ← number of enemies
// <<set $GunTimeLimit to 15>> ← seconds on the clock
//
// The fallback values below are used ONLY if the variable
// isn't defined (e.g. while previewing the file standalone).
// ═══════════════════════════════════════════════════════════════
function getSV(name, fallback) {
try {
// SugarCube exposes story variables on State.variables
var v = window.SugarCube
? window.SugarCube.State.variables[name]
: (window.State ? window.State.variables[name] : undefined);
return (v !== undefined && v !== null) ? v : fallback;
} catch(e) {
return fallback;
}
}
const Accuracy = getSV('GunAccuracy', 60); // %
const EnemyCount = getSV('GunEnemyCount', 3); // count
const TimeLimit = getSV('GunTimeLimit', 15); // seconds
// ═══════════════════════════════════════════════════════════════
// CONSTANTS
// ═══════════════════════════════════════════════════════════════
const ENEMY_W = 90;
const REPOSITION_INTERVAL = 3500;
const REPOSITION_VARIANCE = 0.6;
// ═══════════════════════════════════════════════════════════════
// STATE
// ═══════════════════════════════════════════════════════════════
let enemies = [];
let shotsFired = 0;
let hitsLanded = 0;
let gameActive = false;
let gameResult = null; // 'win' | 'lose'
let timeRemaining = TimeLimit;
let timerInterval = null;
const arena = document.getElementById('arena');
const cursor = document.getElementById('cursor');
const flash = document.getElementById('muzzle-flash');
const overlay = document.getElementById('result-overlay');
const timerBar = document.getElementById('timer-bar');
const timeVal = document.getElementById('time-val');
const timeValOuter = document.getElementById('time-val-outer');
// ═══════════════════════════════════════════════════════════════
// CURSOR
// ═══════════════════════════════════════════════════════════════
document.addEventListener('mousemove', e => {
cursor.style.left = e.clientX + 'px';
cursor.style.top = e.clientY + 'px';
});
document.addEventListener('mouseleave', () => cursor.style.opacity = '0');
document.addEventListener('mouseenter', () => cursor.style.opacity = '1');
// ═══════════════════════════════════════════════════════════════
// DUST PARTICLES
// ═══════════════════════════════════════════════════════════════
function spawnDust() {
for (var i = 0; i < 18; i++) {
var d = document.createElement('div');
d.className = 'dust';
var size = 2 + Math.random() * 5;
d.style.cssText =
'width:' + size + 'px;height:' + size + 'px;' +
'left:' + (Math.random()*100) + '%;' +
'bottom:' + (80 + Math.random()*80) + 'px;' +
'animation-duration:' + (5 + Math.random()*8) + 's;' +
'animation-delay:-' + (Math.random()*10) + 's;';
arena.appendChild(d);
}
}
// ═══════════════════════════════════════════════════════════════
// ENEMY SVG
// ═══════════════════════════════════════════════════════════════
function buildEnemySVG(id) {
var hats = ['#1a1208','#2a1208','#1f1a10'];
var coats = ['#1a1208','#12100a','#201810'];
var h = hats[id % 3], c = coats[id % 3];
var H = Math.round(ENEMY_W * 1.45);
return '<svg class="enemy-svg" width="' + ENEMY_W + '" height="' + H + '" viewBox="0 0 90 130" xmlns="http://www.w3.org/2000/svg">' +
'<rect x="23" y="4" width="44" height="9" rx="2" fill="'+h+'" stroke="#8b6914" stroke-width="1"/>' +
'<rect x="29" y="1" width="32" height="8" rx="2" fill="'+h+'" stroke="#8b6914" stroke-width="1"/>' +
'<ellipse cx="45" cy="29" rx="15" ry="17" fill="#3d2b15" stroke="#6b4c20" stroke-width="1.5"/>' +
'<circle class="eye" cx="39" cy="26" r="3.5" fill="#1a1208"/>' +
'<circle class="eye" cx="51" cy="26" r="3.5" fill="#1a1208"/>' +
'<circle cx="40" cy="26" r="1.5" fill="#cc2200" opacity="0.9"/>' +
'<circle cx="52" cy="26" r="1.5" fill="#cc2200" opacity="0.9"/>' +
'<path d="M38 35 Q45 39 52 35" stroke="#5a3d1a" stroke-width="1.5" fill="none"/>' +
'<path d="M22 46 L25 101 L65 101 L68 46 Q55 56 45 53 Q35 56 22 46Z" fill="'+c+'" stroke="#3d2d0a" stroke-width="1"/>' +
'<path d="M32 49 L38 71 L45 66 L52 71 L58 49 Q52 59 45 56 Q38 59 32 49Z" fill="#2a1f0d" stroke="#5a3d10" stroke-width="0.5"/>' +
'<rect x="28" y="83" width="34" height="6" rx="1" fill="#3d2d0a" stroke="#8b6914" stroke-width="1"/>' +
'<rect x="43" y="83" width="6" height="6" fill="#8b6914"/>' +
'<path d="M22 49 L10 76 L18 78 L28 56Z" fill="'+c+'" stroke="#3d2d0a" stroke-width="1"/>' +
'<rect x="1" y="69" width="18" height="5" rx="1" fill="#5a3d10" stroke="#8b6914" stroke-width="0.8"/>' +
'<rect x="12" y="66" width="5" height="8" rx="1" fill="#3d2d0a" stroke="#8b6914" stroke-width="0.8"/>' +
'<path d="M68 49 L80 73 L72 75 L62 56Z" fill="'+c+'" stroke="#3d2d0a" stroke-width="1"/>' +
'<rect x="28" y="99" width="14" height="18" rx="2" fill="#2a1208" stroke="#3d2d0a" stroke-width="1"/>' +
'<rect x="48" y="99" width="14" height="18" rx="2" fill="#2a1208" stroke="#3d2d0a" stroke-width="1"/>' +
'<line x1="28" y1="115" x2="20" y2="117" stroke="#8b6914" stroke-width="1"/>' +
'<line x1="62" y1="115" x2="70" y2="117" stroke="#8b6914" stroke-width="1"/>' +
'</svg>';
}
// ═══════════════════════════════════════════════════════════════
// POSITIONS
// ═══════════════════════════════════════════════════════════════
function randomPos() {
var mx = 80, top = 80, bot = 140;
return {
x: mx + Math.random() * (window.innerWidth - mx * 2),
y: top + Math.random() * (window.innerHeight - top - bot)
};
}
function safePos(existing) {
var MIN = 130;
for (var attempt = 0; attempt < 30; attempt++) {
var p = randomPos(), ok = true;
for (var i = 0; i < existing.length; i++) {
var dx = existing[i].x - p.x, dy = existing[i].y - p.y;
if (Math.sqrt(dx*dx + dy*dy) < MIN) { ok = false; break; }
}
if (ok) return p;
}
return randomPos();
}
// ═══════════════════════════════════════════════════════════════
// SPAWN
// ═══════════════════════════════════════════════════════════════
function spawnEnemies() {
for (var i = 0; i < EnemyCount; i++) {
(function(idx) {
var pos = safePos(enemies);
var el = document.createElement('div');
el.className = 'enemy';
el.innerHTML = buildEnemySVG(idx);
el.style.left = pos.x + 'px';
el.style.top = pos.y + 'px';
el.style.animationDelay = (idx * 0.12) + 's';
var enemy = { id: idx, el: el, x: pos.x, y: pos.y, alive: true };
el.addEventListener('click', function(e) { e.stopPropagation(); onEnemyClick(enemy); });
el.addEventListener('mouseenter', function() { cursor.classList.add('on-enemy'); });
el.addEventListener('mouseleave', function() { cursor.classList.remove('on-enemy'); });
arena.appendChild(el);
enemies.push(enemy);
scheduleReposition(enemy);
})(i);
}
updateHUD();
}
// ═══════════════════════════════════════════════════════════════
// REPOSITION
// ═══════════════════════════════════════════════════════════════
function scheduleReposition(enemy) {
if (!enemy.alive) return;
var delay = REPOSITION_INTERVAL * (0.5 + Math.random() * REPOSITION_VARIANCE);
enemy.repoTimer = setTimeout(function() {
if (!enemy.alive || !gameActive) return;
var pos = safePos(enemies.filter(function(e) { return e !== enemy; }));
enemy.x = pos.x; enemy.y = pos.y;
enemy.el.style.transition = 'left 0.6s ease-in-out, top 0.6s ease-in-out';
enemy.el.style.left = pos.x + 'px';
enemy.el.style.top = pos.y + 'px';
setTimeout(function() { if (enemy.el) enemy.el.style.transition = ''; }, 700);
scheduleReposition(enemy);
}, delay);
}
// ═══════════════════════════════════════════════════════════════
// SHOOT
// ═══════════════════════════════════════════════════════════════
function onEnemyClick(enemy) {
if (!gameActive || !enemy.alive) return;
var roll = Math.floor(Math.random() * 101);
var hit = (Accuracy >= roll);
shotsFired++;
fireFlash();
if (hit) {
hitsLanded++;
enemy.alive = false;
clearTimeout(enemy.repoTimer);
enemy.el.classList.remove('scared');
enemy.el.classList.add('dying');
cursor.classList.remove('on-enemy');
showImpact(enemy.x, enemy.y - 60, true);
spawnBulletHole(enemy.x + (Math.random()-0.5)*20, enemy.y - 60 - Math.random()*30);
setTimeout(function() { if (enemy.el) enemy.el.remove(); checkWin(); }, 500);
} else {
enemy.el.classList.remove('scared');
void enemy.el.offsetWidth;
enemy.el.classList.add('scared');
showImpact(enemy.x + (Math.random()-0.5)*80, enemy.y - 40, false);
spawnBulletHole(enemy.x + (Math.random()-0.5)*60 + 40, enemy.y - Math.random()*80);
}
updateHUD();
}
// Miss on empty arena click
arena.addEventListener('click', function(e) {
if (!gameActive) return;
shotsFired++;
fireFlash();
showImpact(e.clientX, e.clientY, false);
spawnBulletHole(e.clientX, e.clientY);
updateHUD();
});
// ═══════════════════════════════════════════════════════════════
// FX
// ═══════════════════════════════════════════════════════════════
function fireFlash() {
cursor.classList.add('firing');
setTimeout(function() { cursor.classList.remove('firing'); }, 80);
flash.style.setProperty('--fx', (parseInt(cursor.style.left) / window.innerWidth * 100) + '%');
flash.style.setProperty('--fy', (parseInt(cursor.style.top) / window.innerHeight * 100) + '%');
flash.classList.remove('flash');
void flash.offsetWidth;
flash.classList.add('flash');
}
function showImpact(x, y, hit) {
var d = document.createElement('div');
d.className = 'impact ' + (hit ? 'impact-hit' : 'impact-miss');
d.textContent = hit ? '✦ HIT!' : 'miss';
d.style.left = x + 'px';
d.style.top = y + 'px';
document.body.appendChild(d);
setTimeout(function() { d.remove(); }, 600);
}
function spawnBulletHole(x, y) {
var h = document.createElement('div');
h.className = 'bullet-hole';
h.style.left = x + 'px';
h.style.top = y + 'px';
document.body.appendChild(h);
setTimeout(function() { h.style.transition = 'opacity 1s'; h.style.opacity = '0'; }, 4000);
setTimeout(function() { h.remove(); }, 5200);
}
// ═══════════════════════════════════════════════════════════════
// COUNTDOWN TIMER
// ═══════════════════════════════════════════════════════════════
function startTimer() {
timeRemaining = TimeLimit;
updateTimerDisplay();
timerInterval = setInterval(function() {
timeRemaining -= 0.1;
if (timeRemaining <= 0) {
timeRemaining = 0;
updateTimerDisplay();
clearInterval(timerInterval);
if (gameActive) {
gameActive = false;
gameResult = 'lose';
setTimeout(showResult, 300);
}
} else {
updateTimerDisplay();
// Flash countdown number at each whole second
var secs = Math.ceil(timeRemaining);
if (Math.abs(timeRemaining - secs) < 0.15 && secs <= 5 && secs >= 1) {
flashCountdown(secs);
}
}
}, 100);
}
function updateTimerDisplay() {
var s = Math.max(0, timeRemaining);
var pct = (s / TimeLimit) * 100;
timerBar.style.width = pct + '%';
var txt = s.toFixed(1) + 's';
timeVal.textContent = txt;
timeValOuter.textContent = txt;
if (pct < 30) {
timerBar.classList.add('urgent');
timeVal.style.color = '#c8360c';
timeValOuter.style.color = '#c8360c';
} else {
timerBar.classList.remove('urgent');
timeVal.style.color = '';
timeValOuter.style.color = '';
}
}
function flashCountdown(n) {
var el = document.getElementById('countdown-flash');
var num = document.getElementById('countdown-num');
num.textContent = n;
el.classList.remove('show');
void el.offsetWidth;
el.classList.add('show');
}
// ═══════════════════════════════════════════════════════════════
// HUD
// ═══════════════════════════════════════════════════════════════
function initHUD() {
document.getElementById('acc-pct-label').textContent = Accuracy + '%';
document.getElementById('acc-bar-fill').style.width = Accuracy + '%';
document.getElementById('remaining-val').textContent = '0%';
document.getElementById('time-val').textContent = TimeLimit + '.0s';
}
function updateHUD() {
var liveAcc = shotsFired > 0 ? Math.round(hitsLanded / shotsFired * 100) : 0;
document.getElementById('remaining-val').textContent = liveAcc + '%';
document.getElementById('hits-val').textContent = hitsLanded;
var pipsEl = document.getElementById('enemy-pips');
pipsEl.innerHTML = '';
enemies.forEach(function(e) {
var pip = document.createElement('div');
pip.className = 'pip' + (e.alive ? '' : ' dead');
pipsEl.appendChild(pip);
});
}
// ═══════════════════════════════════════════════════════════════
// WIN CHECK
// ═══════════════════════════════════════════════════════════════
function checkWin() {
if (enemies.every(function(e) { return !e.alive; })) {
gameActive = false;
gameResult = 'win';
clearInterval(timerInterval);
setTimeout(showResult, 400);
}
}
// ═══════════════════════════════════════════════════════════════
// RESULT SCREEN
// ═══════════════════════════════════════════════════════════════
function showResult() {
var win = gameResult === 'win';
var acc = shotsFired > 0 ? Math.round(hitsLanded / shotsFired * 100) : 0;
document.getElementById('result-title').textContent = win ? 'VICTORY!' : 'TIME\'S UP.';
document.getElementById('result-title').className = 'result-title ' + (win ? 'win' : 'lose');
document.getElementById('result-desc').textContent = win
? 'All ' + EnemyCount + ' outlaw' + (EnemyCount > 1 ? 's' : '') + ' down. You\'re still standing.'
: 'The clock ran out. They didn\'t.';
document.getElementById('r-shots').textContent = shotsFired;
document.getElementById('r-hits').textContent = acc + '%';
document.getElementById('r-time').textContent = win ? timeRemaining.toFixed(1) + 's' : '0.0s';
overlay.classList.add('visible');
}
// ═══════════════════════════════════════════════════════════════
// CONTINUE → SUGARCUBE NAVIGATION
// Win → $GunMiniGameStatus = 2
// Lose → $GunMiniGameStatus = 1
// Then always goes to passage: AfterMatch
// ═══════════════════════════════════════════════════════════════
function handleContinue() {
var acc = shotsFired > 0 ? Math.round(hitsLanded / shotsFired * 100) : 0;
try {
SugarCube.State.variables.GunMiniGameStatus = (gameResult === 'win') ? 2 : 1;
SugarCube.State.variables.GunMiniGameAccuracy = acc;
SugarCube.Engine.play('Practice Shooting 2');
} catch(e) {
try {
State.variables.GunMiniGameStatus = (gameResult === 'win') ? 2 : 1;
State.variables.GunMiniGameAccuracy = acc;
Engine.play('Practice Shooting 2');
} catch(e2) {
alert('Navigation error: ' + e2.message);
}
}
}
window.handleContinue = handleContinue;
// ═══════════════════════════════════════════════════════════════
// INIT
// ═══════════════════════════════════════════════════════════════
initHUD();
spawnDust();
setTimeout(function() {
gameActive = true;
spawnEnemies();
startTimer();
}, 400);
})();
</script>
</body>
</html><div class="location-banner">Firing Range</div><<setPassageVariableNoMap>>
<<nobr>><<if $GunMiniGameStatus == 2>>
<img src="img/various/bullseye.webp" width=50% style="display: block; margin: 0 auto;">
You won!
<<if $GunMiniGameAccuracy >= 30 and $GunMiniGameAccuracy < 50>>
<<set $GunAccuracy += 1>>
<<elseif $GunMiniGameAccuracy >= 50 and $GunMiniGameAccuracy < 80>>
<<set $GunAccuracy += 2>>
<<elseif $GunMiniGameAccuracy >= 80 and $GunMiniGameAccuracy <= 100>>
<<set $GunAccuracy += 3>>
<<else>>
<<set $GunAccuracy += 0.5>>
<</if>>
<<set $GunMiniGameAccuracy = 0>>
<<run setup.showNotification("Your accuracy has increased: " +$GunAccuracy +"%!")>>
<<else>>
<img src="img/various/missed.jpg" width=50% style="display: block; margin: 0 auto;">
You lost.
<</if>><</nobr>>
<div class="styled-line"></div>
<<nobr>>
<table class="location-table">
<tr>
<td>
<<button [img[img/location/bsd/firingrange.png][FiringRange]]>><</button>>
<div class="location-name"><b>Leave</b></div>
</td>
</tr>
</table><</nobr>>
<<set $now to setup.changeDate($now, 'hours', 1)>>
<<set $energy to Math.max($energy - 10, 0)>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/bsd/firingrange.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="styled-line"></div>
<<nobr>>
<<if $ProofForGreg == 1>>@@.option-button;<<link "Call">><<goto "JoePhoneCall1">><</link>>@@<</if>>
@@.option-button-disabled;Booty Call • Coming soon@@
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@ <</nobr>>
<div class="styled-line"></div>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="styled-line"></div>
<<nobr>>
<<if $TaraPhoneCall1 == 1 && $now >= $TaraCall1Time>>@@.option-button;<<link "Listen">><<goto "TaraPhoneCall1">><</link>>@@<</if>>
@@.option-button-disabled;Booty Call • Coming soon@@
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@ <</nobr>>
<div class="styled-line"></div>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="styled-line"></div>
<<nobr>>
<<if $StreetIncidentCall1 == 1>>@@.option-button;<<link "Listen">><<goto "StreetIncident1">><</link>>@@<</if>>
@@.option-button-disabled;Booty Call • Coming soon@@
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@ <</nobr>>
<div class="styled-line"></div>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="styled-line"></div>
<<nobr>>
<<if $CarriePhoneCall1 == 1>>@@.option-button;<<link "Call">><<goto "CarriePhoneCall1">><</link>>@@<</if>>
<<if $BankHeist1 == 1 and $now < $JackMcMahonReleaseTime>>@@.option-button;<<link "Call">><<goto "BankHeist1">><</link>>@@<</if>>
<<if $BankHeist1 == 1 and $now >= $JackMcMahonReleaseTime>>@@.option-button;<<link "Call">><<goto "BadEnding6Bundle2">><</link>>@@<</if>>
<<if $BankHeistLayLow1 == 1>>
@@.option-button;<<link "Call">><<goto "GoodEndingCarriePhoneCall1">><</link>>@@
<</if>>
@@.option-button-disabled;Booty Call • Coming soon@@
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@ <</nobr>>
<div class="styled-line"></div>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="styled-line"></div>
<<nobr>>
<<if $BankHeistLayLow1 == 1 && $now >= $BankHeistLayLow1Time>>@@.option-button;<<link "Listen">><<goto "Chapter1TrueEndingBundle1">><</link>>@@
@@.option-button-disabled;Booty Call • Coming soon@@
@@.option-button;<<link "Hang up">><<goto $prevPassage>><</link>>@@ <</nobr>>
<div class="styled-line"></div>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><div class="location-banner">You must be at least 18 years old to continue this journey</div>
<<nobr>>@@.option-button;[[I am over the age of 18|Main Menu]]@@
@@.option-button;[[I am under the age of 18|Under18Elerts]]@@
<</nobr>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<run window.close()>><<set $BankHeistLayLow1 = 0>>
<<set $CircleOfSins2 = 0>>
<<set $Chapter2Starter = 1>>
<<run updateGuideTextForStoryline("Chapter I Guide", "Go to sleep to at your home to start Chapter 2")>>
<<run updateGuideTextForStoryline("Maria", "You have reached the end of this update")>>
<<goto "Church">><div class="location-banner">Twenty Years Ago</div>
The night is black and wet, rain sheeting sideways across the cracked asphalt of of the trail. You and Carrie are running.
Carrie is half a step ahead, black hair plastered to her face. She’s fast but she keeps looking back at you.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "█████">>
<<dialogue $playerAvatar "You" "Keep going, Carrie. Head into the woods. Joe is waiting at the extraction point, but he won’t be there for long">>
She stumbles but catches herself, turning to face you even as she runs backward for a few steps. The sirens are closer. Tires screech somewhere on the road behind you.
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "No. We go together. We always go together">>
<<dialogue $playerAvatar "You" "Not this time, baby. I’ll hold them off">>
<<dialogue "img/character/carrie/carrieavatar.jpg" "Carrie" "I’m not leaving you!">>
<<dialogue $playerAvatar "You" "Carrie, go. I swear, no matter what happens, I’ll find you, I love you">>
You can see the moment she understands that you’re not asking. Her face crumples, but she nods once, then she bolts into the woods.
You don’t watch her go.
You turn back toward the road, plant your feet, and wait.
<<dialogue "img/various/unknown.png" "Police officer" "Stop! Police! On the ground! Now!">>
You don’t move. Instead you take one deliberate step backward and run. You know you can’t outrun the cops, but at least this might buy Carrie some time. You keep running until you slam into a wall of flashing lights and screaming sirens. You turn around, only to find the cops have caught up to you. You’re surrounded.
You stand slowly, hands up, rain streaming down your face.
The lead trooper steps forward, cuffs already out
<<dialogue "img/various/unknown.png" "Police officer" "On your knees. Now">>
You drop slowly to your knees, hands still raised. You look into the black wall of trees where Carrie disappeared.
<<dialogue "img/various/unknown.png" "Police officer" "You’re going away for a long time, kid">>
@@.option-button;[[Continue|Chapter2Starter1]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><<dialogue "img/various/unknown.png" "The Judge" "Order! Order in my court!">>
You stand in the defendant’s box, wrists cuffed in front, orange jumpsuit stiff with new starch, hair already starting to grow out after three months in county. Your public defender stands beside you, tie crooked, an amateur. He hasn’t said much since the trial started; there wasn’t much to say.
<<set $DiamondHeistPast to setup.changeDate($FirstGameTime, 'years', -20)>>
The judge clears his throat, opens the folder in front of him.
<<dialogue "img/various/unknown.png" "The Judge" "Defendant █████ █████ known in these proceedings as the primary suspect in the armed robbery of the First Federal Transport armored car on the night of <<= setup.getFormattedDate($DiamondHeistPast, 'eu')>>. Charges: first-degree armed robbery, aggravated assault on a peace officer, conspiracy to commit grand theft, possession of stolen property valued in excess of one million dollars, resisting arrest with violence, and felony flight to elude. The jury has returned a unanimous verdict of guilty on all counts">>
The judge continues, voice flat and final.
<<dialogue "img/various/unknown.png" "The Judge" "Taking into account the severity of the offenses, the endangerment of multiple lives, the defendant’s complete lack of remorse, and the fact that the stolen property has never been recovered… this court sentences you, █████ █████, to a term of seventy years in the state penitentiary, with eligibility for parole after fifty-five years served. Court is adjourned">>
Two deputies grab your elbows and march you through the side door, down a fluorescent-lit corridor that smells of bleach and despair.
They don’t take you straight to the transport van. Instead they steer you into a small interview room. They uncuff you, sit you down, and leave without a word. A man is already there, mid-forties, gray suit, no tie, hair clipped short, wire-rimmed glasses.
You rub your wrists, say nothing. He opens the folder, skims a page, then looks up.
<<dialogue "img/various/unknown.png" "The man" "I work with a branch of the government most people don’t know exists. I hate to see kids rotting in prison for stealing rocks. Diamonds are just shiny rocks, after all">>
He slides the single sheet across the table toward you. It’s a consent form.
<<dialogue "img/various/unknown.png" "The man" "We’re developing the cure for the ‘rebel’ circuitry in the human brain, it's still in early trials. That's why I'm here">>
The man takes a sip of his coffee.
<<dialogue "img/various/unknown.png" "The man" "Sign the form, and you won’t even serve a third of your time. That’s my guarantee">>
<<dialogue $playerAvatar "You" "What exactly is that cure?">>
We used to joke it was “Lobotomy 2.0,” but it does more than reduce you to a hollow shell.
.
.
.
You’ll keep all your personality, you're not going to become a mindless automat.
.
.
.
You’ll keep all your memories, but your skills will be wiped.
.
.
.
Side effects are unknown.
.
.
.
@@.option-button;[[Wake up|Wine Storage]]@@
<<set $Chapter2Starter = 0>>
<<set $Chapter1 = 0>>
<<set $Chapter2 = 1>>
<<set $energy to Math.max($energy, $maxEnergy)>>
<<set $now to setup.changeDate($now, 'hours', 7)>>
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>
<<run updateGuideTextForStoryline("Chapter I Guide", "You have reached the end of this update")>>
<<run setup.showNotification("Check your Map")>><<nobr>><div class="time-advance-popup">
<h2 class="time-advance-title">Advance Time</h2>
<!-- Slider -->
<div class="time-slider-container">
<div class="time-slider-label">
<span>Hours:</span>
<span class="time-slider-value" id="time-hours-display">1</span>
</div>
<input type="range"
id="time-hours-slider"
min="1"
max="24"
value="1"
class="time-advance-slider">
</div>
<!-- Confirm Button -->
<div class="time-advance-buttons">
<<link "Confirm">>
<<script>>
var hours = parseInt($('#time-hours-slider').val());
State.variables.now = setup.changeDate(State.variables.now, 'hours', hours);
<</script>>
<<run $('.popup-overlay').remove()>>
<<goto $prevPassage>>
<</link>>
</div>
</div>
<script>$(document).ready(function() {
$('#time-hours-slider').on('input', function() {
$('#time-hours-display').text($(this).val());
});
});
</script>
<</nobr>>
<style>
.time-advance-popup {
padding: 20px;
text-align: center;
}
.time-advance-title {
color: #c9a961;
font-size: 1.8em;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
margin: 0 0 20px 0;
font-family: 'Montserrat', sans-serif;
text-shadow: 0 0 15px rgba(201, 169, 97, 0.6);
}
.time-slider-container {
background: rgba(0, 0, 0, 0.3);
padding: 25px;
margin: 20px 0;
border-left: 3px solid #c9a961;
clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);
}
.time-slider-label {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
color: #c9a961;
font-weight: 700;
font-size: 1.1em;
font-family: 'Montserrat', sans-serif;
}
.time-slider-value {
font-size: 1.3em;
color: #e6c170;
text-shadow: 0 0 10px rgba(201, 169, 97, 0.6);
}
.time-advance-slider {
width: 100%;
height: 8px;
border-radius: 4px;
background: rgba(0, 0, 0, 0.5);
outline: none;
-webkit-appearance: none;
border: 1px solid rgba(201, 169, 97, 0.3);
}
.time-advance-slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 24px;
height: 24px;
border-radius: 50%;
background: #c9a961;
cursor: pointer;
box-shadow: 0 0 10px rgba(201, 169, 97, 0.6);
transition: all 0.3s ease;
}
.time-advance-slider::-webkit-slider-thumb:hover {
transform: scale(1.2);
box-shadow: 0 0 15px rgba(201, 169, 97, 0.8);
}
.time-advance-slider::-moz-range-thumb {
width: 24px;
height: 24px;
border-radius: 50%;
background: #c9a961;
cursor: pointer;
border: none;
box-shadow: 0 0 10px rgba(201, 169, 97, 0.6);
transition: all 0.3s ease;
}
.time-advance-slider::-moz-range-thumb:hover {
transform: scale(1.2);
box-shadow: 0 0 15px rgba(201, 169, 97, 0.8);
}
.time-advance-buttons {
margin-top: 25px;
text-align: center;
}
.time-advance-buttons a {
display: inline-block;
background: linear-gradient(135deg, rgba(15, 15, 15, 0.9) 0%, rgba(25, 25, 25, 0.9) 100%);
border: 2px solid rgba(201, 169, 97, 0.6);
color: #c9a961;
padding: 12px 40px;
font-family: 'Montserrat', sans-serif;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.15em;
text-decoration: none;
cursor: pointer;
transition: all 0.3s ease;
clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.5);
}
.time-advance-buttons a:hover {
background: linear-gradient(135deg, rgba(25, 25, 25, 0.9) 0%, rgba(35, 35, 35, 0.9) 100%);
border-color: #c9a961;
color: #e6c170;
transform: translateY(-3px);
text-shadow: 0 0 10px rgba(201, 169, 97, 0.6);
box-shadow:
0 0 20px rgba(201, 169, 97, 0.4),
0 6px 20px rgba(0, 0, 0, 0.6);
}
.time-advance-buttons a:active {
transform: translateY(0);
}
</style>COMING SOOM
@@.option-button;<<link "Leave">><<goto $prevPassage>><</link>>@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>COMING SOOM
@@.option-button;<<link "Leave">><<goto $prevPassage>><</link>>@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/various/cometnight.webp') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isEvening($now) || setup.isNight($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(2.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(2.0) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>><h2>Right sidebar guide</h2>
<img src="img/guild/rightsidebarguide.png" width=50% style="display: block; margin: 0 auto;">
Button info:
<strong>Home</strong>: Fast travel to your current home
<strong>Map</strong>: Click to access the map of Bason
<strong>Phone</strong>: Used to access many features such as Contacts, Settings, TikTok, and more
<strong>Gallery</strong>: You can view character information and replay unlocked scenes
<strong>Credit</strong>: You can find the actress and model behind the character here. Shout-out to my patrons
<strong>Cheats</strong>: Where to use cheat codes
<strong>Advance time</strong>: You can skip ahead to any time, but keep an eye on your hungerYou arrived at Riley’s place just past sundown, the small apartment building.
<img src="img/character/riley/rileyathome.jpg" width=70% style="display: block; margin: 0 auto;">
When you knocked, the door opened almost immediately. Riley standing there with an eager smile, dressed casually in a loose sweatshirt and jeans, her hair pulled back in a simple ponytail.
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "Sheriff! Come on in, don’t just stand out there">>
<<dialogue $playerAvatar "You" "Good evening">>
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "Sit anywhere you like. I’ll put the kettle on. Hope tea’s okay. I don’t trust my coffee-making skills after midnight">>
You took a seat on the couch, the cushions soft but a little worn, while Riley busied herself with cups and the kettle. Her movements were quick, almost nervous—like she’d been waiting all day for this moment. When she returned, she set the cups down carefully, then sat across from you, leaning forward slightly.
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "So… what’s it like, sir? Carrying all that responsibility">>
<<dialogue $playerAvatar "You" "Responsibility’s heavy. Most people think it’s about being a hero, and save the day, but it's just our job. Truth is, I think the badge doesn’t feel like power. Some days it’s just a reminder of everything you can’t really control...">>
As you talk, Riley leaned in, inch by inch, her curiosity pulling her closer than she probably realized. You shifted back instinctively, and in the small movement her cup slipped from her hand, splashing warm tea across your sleeve.
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "Oh—damn it! I’m so sorry, Sheriff!">>
<<dialogue $playerAvatar "You" "It's okay">>
She grabbed a napkin, dabbing at your arm in a rush before pausing, flustered.
<<dialogue "img/character/riley/rileyavatar1.jpg" "Riley" "Here, uh… you should rinse that off before it stains. Bathroom’s just down the hall">>
You head to the bathroom to dry off.
@@.option-button;[[Come back|RileyHouse3]]@@
<<run hideSidebar()>>
<<nobr>>
<style>
/* Brightness control with color overlay */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
url('img/location/rileyhouse/rileybedroom.png') center/cover no-repeat fixed !important;
z-index: -1;
}
</style>
<<if setup.isOpeningHours($now)>>
<style>/* Override brightness when open */
body::before {
filter: brightness(1.0) !important;
}
</style>
<<else>>
<style>
body::before {
filter: brightness(0.2) !important;
}
</style>
<</if>>
<<setPassageStyle>>
<</nobr>>